如何通过控件模板中的触发器设置DropShadowEffect的属性?

24

我有一个Button ControlTemplate,我正在尝试通过使用Trigger来修改Border上的DropShadowEffect。以下是我的 Xaml 代码:

<Button.Template>
  <ControlTemplate TargetType="Button">
    <Border x:Name="ButtonBorder" Margin="10" CornerRadius="5" Background="Gray">
      <Border.Effect>
        <DropShadowEffect ShadowDepth="5" x:Name="BorderEffect" />
      </Border.Effect>
      <ContentPresenter HorizontalAlignment="Center" />
    </Border>
    <ControlTemplate.Triggers>
      <Trigger Property="Button.IsMouseOver" Value="True">
        <Setter Property="Background" TargetName="ButtonBorder" Value="LightGray" />
      </Trigger>
      <Trigger Property="Button.IsPressed" Value="True">
        <Setter Property="Margin" TargetName="ButtonBorder" Value="13,13,7,7" />
        <!-- this is where I get the error -->
        <Setter Property="ShadowDepth" TargetName="BorderEffect" Value="2" />
      </Trigger>
    </ControlTemplate.Triggers>
  </ControlTemplate>
</Button.Template>

我收到了一个错误,该错误指出找不到BorderEffect
我还尝试过:

<Setter Property="Effect.ShadowDepth" TargetName="ButtonBorder" Value="2" />

但我也收到了一个错误提示,告诉我在类型为Effect的对象上找不到属性ShadowDepth(因为它正在使用基类而不是DropShadowEffect)。

我该如何解决这个问题?

1个回答

33

您可以在setter.value中将Effect作为整体进行设置。

 <Setter Property="Margin" TargetName="ButtonBorder" Value="13,13,7,7" />
    <Setter Property="Effect" TargetName="ButtonBorder" >
      <Setter.Value>
         <DropShadowEffect ShadowDepth="2" />
      </Setter.Value>
    </Setter>
  </Trigger>

是的,那就是我最终使用的方法,但我希望有一种方法可以直接修改我需要的属性...谢谢 :-) - Julien Poulin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接