How can I set a property of a DropShadowEffect via a Trigger in a ControlTemplate?

controltemplate, triggers, wpf

Solution

You can set the Effect as a whole in the 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>

Problem

I have a `Button` `ControlTemplate` and I'm trying to modify a `DropShadowEffect` on a `Border` by using a `Trigger`. Here is my 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> ``` I get an error stating that the `BorderEffect` cannot be found. I have also tried: ``` <Setter Property="Effect.ShadowDepth" TargetName="ButtonBorder" Value="2" /> ``` But I also get an error telling me that the property `ShadowDepth` could not be found on the object of type `Effect` (because it's using the base class instead of `DropShadowEffect`) How can I solve this?

Original source