【问题标题】:How can I set a property of a DropShadowEffect via a Trigger in a ControlTemplate?如何通过 ControlTemplate 中的触发器设置 DropShadowEffect 的属性?
【发布时间】:2010-12-17 12:26:46
【问题描述】:

我有一个ButtonControlTemplate,我正在尝试使用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

我该如何解决这个问题?

【问题讨论】:

    标签: wpf triggers controltemplate


    【解决方案1】:

    可以在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>
    

    【讨论】:

    • 是的,这就是我最终使用的,但我有一种方法可以修改我需要的属性...谢谢:-)
    猜你喜欢
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2013-08-30
    • 1970-01-01
    • 2022-01-03
    • 2014-04-19
    相关资源
    最近更新 更多