2009-11-17 3 views
21

J'ai un ButtonControlTemplate et j'essaye de modifier un DropShadowEffect sur un Border en utilisant un Trigger. Voici mon Xaml:Comment puis-je définir une propriété d'un DropShadowEffect via un déclencheur dans un 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> 

Je reçois une erreur indiquant que l'effet BorderEffect est introuvable.
J'ai aussi essayé:

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

mais je reçois aussi une erreur me disant que la propriété ShadowDepth n'a pas pu être trouvé sur l'objet de type Effect (parce qu'il utilise la classe de base au lieu de DropShadowEffect)

Comment puis-je résoudre ce problème?

Répondre

25

Vous pouvez définir l'effet dans son ensemble dans le 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

Ouais, c'est ce que je fini par utiliser, mais je qui il y avait un moyen de modifier simplement la propriété que j'ai besoin ... Merci :-) –

Questions connexes