【问题标题】:Apply Style after Transform变换后应用样式
【发布时间】:2013-10-10 21:44:59
【问题描述】:

我已经为添加阴影的标签创建了一种样式:

<Style TargetType="Label" x:Key="BigLabel">
    <Setter Property="FontSize" Value="35" />
    <!-- some more... -->
    <Setter Property="Effect">
        <Setter.Value>
            <DropShadowEffect BlurRadius="0" Opacity="0.9" ShadowDepth="5" />
        </Setter.Value>
    </Setter>
</Style>

我要为其使用样式的标签之一已旋转。现在,当我以这种方式应用样式时:

<Label Content="Awesome" Style="{StaticResource BigLabel}" >
    <Label.LayoutTransform>
        <RotateTransform Angle="-90" />
    </Label.LayoutTransform>
</Label>

那么结果是,从标签的角度来看,投影仍然会进入相同的方向(右下),但从用户的角度来看(右上)会进入不同的方向。现在有多个标签,有些是旋转的,有些不是,我希望阴影全部进入同一方向从用户的角度来看,右下角。

这意味着要么我必须在旋转标签上设置不同的Direction,要么告诉 WPF 在旋转后应用带有阴影的样式。现在我想知道:

有没有办法告诉 WPF 先旋转然后应用样式?

【问题讨论】:

  • 这里我在 Windows 7 SP1 64 位、NVIDIA GeForce 9100M G 中使用 .Net 4.5 进行了测试,结果正常。也许这是一个错误。您是否也尝试过使用 Label.RenderTransform 进行测试?
  • @Tony:Label.RenderTransform 也一样。我也有 .NET 4.5、Win7 SP1 x64,但是 NVIDIA Quadro NVS 295。
  • @Tony:英特尔高清显卡也是如此。不知道这算不算bug。你确定它对你有用吗?我想我应该澄清一下:我希望所有阴影都进入同一个方向,右下角,无论标签是否旋转。即:先旋转,后阴影。
  • 我已更改此设置以使其更明显:

标签: wpf


【解决方案1】:

试试这个,使用 Direction 属性:

    <Style TargetType="Label" x:Key="BigLabel">
        <Setter Property="FontSize" Value="35" />
        <!-- some more... -->
        <Setter Property="Effect">
            <Setter.Value>
                <DropShadowEffect BlurRadius="5" Opacity="0.92" ShadowDepth="3" Direction="225" />
            </Setter.Value>
        </Setter>
    </Style>

【讨论】:

  • 简单的答案是否定的。 LayoutTransform 也会旋转方向角度,因此您必须根据每种样式和用户视角为每种样式/角度选择方向。正如我在这个答案中所做的那样:旋转标签上的方向属性是 225。在普通标签上它将是 315。(90 度差异)
猜你喜欢
  • 2016-07-12
  • 1970-01-01
  • 2020-03-22
  • 2018-03-29
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2012-06-29
  • 2018-07-01
相关资源
最近更新 更多