2015-09-02 5 views
1

Я новичок в WPF. У меня проблема с EventTrigger. У меня есть две кнопки (bt1 и bt1) и StackPanel (стековая панель) в сетке.Что случилось в моем WPF EventTrigger?

bt1 и стек панелей видны сначала. И bt2 рухнул.

У меня есть две цели (закончил только в XAML):

  1. Когда Click bt1, то StackPanel и bt1 будет свернуто, bt2 будут видны.

  2. При нажатии кнопки bt2 будет отображаться панель стека и bt1. bt2 будет свернуто.

Я только что закончил цель. Но код не работал. Что с этим не так?

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

ответ

0

Это не работает, потому что stackpanel и btn2 определяются вне зрительного-дерева btn1.Style. Кроме того, нет необходимости в стиле btn1 для достижения такого рода поведения.

Поэтому вместо использования Style.Triggers:

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

Определите ваш EventTriggers прямо в Button.Trrigers.

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