2009-11-17 4 views
21

Ho un ButtonControlTemplate e sto cercando di modificare un DropShadowEffect su un Border utilizzando un Trigger. Ecco il mio Xaml:Come posso impostare una proprietà di DropShadowEffect tramite un trigger in un oggetto ControlTemplate?

<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> 

Si verifica un errore che indica che BorderEffect non può essere trovato.
Ho anche provato:

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

Ma ho anche un errore che mi diceva che la proprietà ShadowDepth non è stato trovato l'oggetto di tipo Effect (perché sta usando la classe base, invece di DropShadowEffect)

Come posso risolvere questo?

risposta

25

È possibile impostare l'effetto nel suo insieme nella 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> 
+0

Sì, questo è quello che ho finito per usare, ma io, che ci fosse un modo per modificare solo la proprietà che ho bisogno ... Grazie :-) –