2011-07-13 4 views
0

チェックボックスのIsCheckedプロパティに応じて、2つの矩形の可視性をアニメーション化しようとする次のWPF XAMLがあります。チェックボックスをオンにすると、青いボックスが表示され、1秒後に赤いボックスが消えることを意味します。チェックしないと赤いボックスが表示され、青いボックスは消えます。 私はストーリーボードを使用していますが、何か不足しています。それは最初の引き金のために働いていますが、アニメ化されたプロパティのいくつかは立ち往生します。WPFアニメーションの再トリガー

<DataTemplate x:Key="dt"> 
       <DockPanel> 
        <CheckBox x:Name="ckToggle" Content="Toggle" DockPanel.Dock="Top" IsThreeState="True"/> 
        <StackPanel Orientation="Horizontal"> 
         <Rectangle x:Name="a" Visibility="Hidden" Width="100" Height="100" Fill = "Red"/> 
         <Rectangle x:Name="b" Visibility="Hidden" Width="100" Height="100" Fill = "Blue"/> 
        </StackPanel> 
       </DockPanel> 

       <DataTemplate.Triggers> 

        <DataTrigger Binding="{Binding ElementName=ckToggle, Path=IsChecked}" Value="True"> 
         <DataTrigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="a" Storyboard.TargetProperty="Visibility"> 
             <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Visible}"/> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </BeginStoryboard> 
          <BeginStoryboard> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="b" Storyboard.TargetProperty="Visibility"> 
             <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/> 
             <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Hidden}"/> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </BeginStoryboard> 
         </DataTrigger.EnterActions> 
         <DataTrigger.ExitActions> 
         </DataTrigger.ExitActions> 

        </DataTrigger> 

        <DataTrigger Binding="{Binding ElementName=ckToggle, Path=IsChecked}" Value="False"> 
          <DataTrigger.EnterActions> 
          <BeginStoryboard> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="b" Storyboard.TargetProperty="Visibility" > 
             <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Visible}"/> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </BeginStoryboard> 
          <BeginStoryboard> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="a" Storyboard.TargetProperty="Visibility"> 
             <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/> 
              <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Hidden}" /> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </BeginStoryboard> 
         </DataTrigger.EnterActions> 
         <DataTrigger.ExitActions> 
         </DataTrigger.ExitActions> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 

 <ContentControl ContentTemplate="{StaticResource dt}"/> 

誰でも助けることができる場合には、感謝 ブライアン

答えて

0

問題ます持っているのはwpfストーリーボードのプロパティです。ストーリーボードを始めると、ストーリーボードにそれを伝えるまで停止しません。だから、あなたが最初のストーリーボードは、あなたが2番目を呼び出すとまだ実行中であり、あなたは困っている。そこに出る方法は次のとおりです: 最初に1つのトリガごとに2つのストーリーボードを結合します(複数のアニメーションを1つのストーリーボードに置くことができますが、そうする必要はありませんが、作業が楽になります)。 2つの残りのBeginStoryboard呼び出しにそれぞれ名前を付け、exitActionsブロックの各dataTriggerに同じ名前のStopStoryboard呼び出しを追加します。私はあなたが望むように(うまくいけば)働く次のコードで終わった:

<Window x:Class="Test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:Test" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <DataTemplate x:Key="dt"> 
     <DockPanel> 
      <CheckBox x:Name="ckToggle" Content="Toggle" DockPanel.Dock="Top" IsThreeState="True"/> 
      <StackPanel Orientation="Horizontal"> 
       <Rectangle x:Name="a" Visibility="Hidden" Width="100" Height="100" Fill = "Red"/> 
       <Rectangle x:Name="b" Visibility="Hidden" Width="100" Height="100" Fill = "Blue"/> 
      </StackPanel> 
     </DockPanel> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding ElementName=ckToggle, Path=IsChecked}" Value="True"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard Name="st1"> 
         <Storyboard> 
          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="a" Storyboard.TargetProperty="Visibility"> 
           <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Visible}"/> 
          </ObjectAnimationUsingKeyFrames> 
          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="b" Storyboard.TargetProperty="Visibility"> 
           <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/> 
           <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Hidden}"/> 
          </ObjectAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
       <DataTrigger.ExitActions> 
        <StopStoryboard BeginStoryboardName="st1"/> 
       </DataTrigger.ExitActions> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding ElementName=ckToggle, Path=IsChecked}" Value="False"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard Name="st2"> 
         <Storyboard> 
          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="b" Storyboard.TargetProperty="Visibility"> 
           <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Visible}"/> 
          </ObjectAnimationUsingKeyFrames> 
          <ObjectAnimationUsingKeyFrames Storyboard.TargetName="a" Storyboard.TargetProperty="Visibility"> 
           <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/> 
           <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Hidden}" /> 
          </ObjectAnimationUsingKeyFrames> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
       <DataTrigger.ExitActions> 
        <StopStoryboard BeginStoryboardName="st2"/> 
       </DataTrigger.ExitActions> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
</Window.Resources> 
<ContentControl ContentTemplate="{StaticResource dt}"/></Window> 
+0

ちょっと@selen、スポットに!あなたは伝説です。ありがとう、ブライアン – bryan

関連する問題