2015-09-02 2 views
1

Je suis nouveau dans WPF. J'ai un problème en utilisant EventTrigger. J'ai deux boutons (bt1 et bt1) et un StackPanel (panneau de pile) dans une grille. Bt1 et stackpanel sont visibles en premier lieu.Qu'est-ce qui ne va pas dans mon WPF EventTrigger?

Et bt2 est effondré.

J'ai deux cibles (terminé en XAML seulement):

  1. Lorsque Cliquez BT1, le StackPanel et BT1 seront Collapsed, BT2 sera visible.

  2. Lorsque vous cliquez sur bt2, le panneau de pile et bt1 seront visibles. bt2 sera effondré.

Je viens de terminer la cible un. Mais le code n'a pas fonctionné. Qu'est ce qui ne va pas avec ça?

<Grid Name="Grid"> 
    <StackPanel x:Name="stackpanel" Visibility="{Binding Path=Visibility, ElementName=bt1, Mode=TwoWay}"> 
     <TextBlock Text="{Binding}" VerticalAlignment="Top"></TextBlock> 
    </StackPanel> 
    <Button Name="bt1" VerticalAlignment="Top" HorizontalAlignment="Right" Width="20" Height="20"> 
     <Button.Style> 
      <Style> 
       <Style.Triggers> 
        <EventTrigger RoutedEvent="Button.Click"> 
         <EventTrigger.Actions> 
          <BeginStoryboard> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="stackpanel" 
                    Storyboard.TargetProperty="Visibility"> 
             <DiscreteObjectKeyFrame Value="{x:Static Visibility.Collapsed}"></DiscreteObjectKeyFrame> 
            </ObjectAnimationUsingKeyFrames> 

            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="bt2" 
                    Storyboard.TargetProperty="Visibility" 
                    > 
             <DiscreteObjectKeyFrame Value="{x:Static Visibility.Visible}"></DiscreteObjectKeyFrame> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </BeginStoryboard> 
         </EventTrigger.Actions> 
        </EventTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 
    <Button Name="bt2" Visibility="Collapsed" VerticalAlignment="Top" HorizontalAlignment="Left"></Button> 
</Grid> 

Répondre

0

Cela ne fonctionne pas parce que stackpanel et btn2 sont définis en dehors de l'arbre visuel de btn1.Style. De plus, il n'y a pas besoin de style btn1 pour réaliser ce genre de comportement.

Par conséquent, au lieu d'utiliser Style.Triggers:

<Button Name="bt1" > 
    <Button.Style> 
     <Style> 
      <Style.Triggers> 
       <EventTrigger RoutedEvent="Button.Click"> 
       .... 

Définissez votre EventTriggers directement dans votre Button.Trrigers.

<Button Name="bt1" > 
    <Button.Triggers> 
     <EventTrigger RoutedEvent="Button.Click"> 
     ....