Как я могу установить свойство DropShadowEffect через Trigger в ControlTemplate? - PullRequest
21 голосов
/ 17 ноября 2009

У меня есть Button ControlTemplate, и я пытаюсь изменить DropShadowEffect на Border с помощью Trigger. Вот мой 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" />

Но я также получаю сообщение об ошибке, сообщающее, что свойство ShadowDepth не может быть найдено для объекта типа Effect (поскольку он использует базовый класс вместо DropShadowEffect)

Как я могу решить эту проблему?

1 Ответ

27 голосов
/ 17 ноября 2009

Вы можете установить Эффект в целом в setter.value

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