2016-04-22 3 views
0

Dans un ButtonControlTemplate J'ai besoin d'accéder à l'événement IsPressed. Comment je fais ça? Contexte: J'ai ajouté une goutte DropShadowEffect à ButtonStyle mais j'ai obtenu un texte flou. This fix solved the blurry text issue. Cependant, cela a ajouté un nouveau problème. Je voulais supprimer le DropShadowEffect lorsque l'utilisateur clique sur le bouton. J'ai pensé que je le ferais comme ça;WPF Supprimer Butto DropShadowEffect sur clic par ControlTemplate

<Style x:Key="DropShadowButtons" TargetType="Button"> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Button}"> 
      <Grid> 
       <Border Background="{TemplateBinding Background}"> 
        <Border.Style> 
         <Style TargetType="{x:Type Border}"> 
          <Setter Property="Border.Effect"> 
           <Setter.Value> 
            <DropShadowEffect Color="Black" Opacity="0.5" /> 
           </Setter.Value> 
          </Setter> 
          <Style.Triggers> 
           <Trigger Property="Button.IsPressed" Value="False"> 
            <Setter Property="Border.Effect"> 
             <Setter.Value> 
              <DropShadowEffect Color="Black" Direction="320" ShadowDepth="0" BlurRadius="0" Opacity="0" /> 
             </Setter.Value> 
            </Setter> 
           </Trigger> 
          </Style.Triggers> 
         </Style> 
        </Border.Style> 
       </Border> 
       <Border Background="{TemplateBinding Background}"> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="5,2,5,0"/> 
       </Border> 
      </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

alors compris que Button.IsPressed ne serait pas le feu faisant partie de la Border. Alors, comment ControlTemplate accède-t-il à l'événement IsPressed du bouton?

Répondre

0

Vous avez juste besoin du déclencheur sur le ControlTemplate au lieu du style Border. Pour que le Setter puisse cibler la Bordure, vous devez donner un nom à la Bordure, et vous devrez donner un NomCible au Setter:

<ControlTemplate TargetType="{x:Type Button}"> 
    <Grid> 
     <Border x:Name="BackgroundBorder" Background="{TemplateBinding Background}"> 
      <Border.Style> 
       <Style TargetType="{x:Type Border}"> 
        <Setter Property="Border.Effect"> 
         <Setter.Value> 
          <DropShadowEffect Color="Black" Opacity="0.5" /> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </Border.Style> 
     </Border> 
     <Border Background="{TemplateBinding Background}"> 
      <ContentPresenter 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       Margin="5,2,5,0" 
       /> 
     </Border> 
    </Grid> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsPressed" Value="True"> 
      <Setter TargetName="BackgroundBorder" Property="Effect"> 
       <Setter.Value> 
        <DropShadowEffect 
         Color="Black" 
         Direction="320" 
         ShadowDepth="0" 
         BlurRadius="0" 
         Opacity="0" 
         /> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
    </ControlTemplate.Triggers>   
</ControlTemplate> 
+0

Merci beaucoup! –