2017-07-19 22 views
0

データトリガーがfalseに設定されていると、関連するコントロールがアニメーションで非表示になります。スクリーンが読み込まれるとき、プロパティの値はすでにfalseです。それでもアニメーションを実行し、コントロールをフェードアウトさせて非表示にします。WPFアニメーションの読み込み中にデータトリガーが発生する

画面上で一時的な点滅が発生しています。

プロパティをtrueに設定するまで、これらのコントロールは画面に表示されないようにします。

<Window.Resources> 
    <Style x:Key="somestyle" TargetType="Button"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsControlVisible,UpdateSourceTrigger=PropertyChanged}" Value="False"> 
       <DataTrigger.EnterActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Duration="0:0:1.5" Storyboard.TargetProperty="Opacity" To="0" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.EnterActions> 
       <DataTrigger.ExitActions> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Duration="0:0:1.5" Storyboard.TargetProperty="Opacity" To="1" /> 
         </Storyboard> 
        </BeginStoryboard> 
       </DataTrigger.ExitActions> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 
<StackPanel VerticalAlignment="Center"> 
    <Button Width="100" Height="50" Content="Toggle Visibiity" Click="Button_Click"/> 
    <Button Width="200" Height="50" Content="Something Something" Margin="0 20 0 0" Style="{StaticResource somestyle}"/> 
</StackPanel> 
+1

ロードメソッドでは、読み込み開始時にStackPanelをvisible = falseに設定します。そして、Panelの最後の命令は、StackPanelをvisible = trueにします。 – jdweng

+0

@jdweng loadメソッドには命令がありませんので、StackPanelVisible = falseとStackPanelVisible = trueの2つのステートメントのみが表示されます – MegaMind

+0

あなたは言った: "画面がロードされています"。だから私は建設されたことを意味すると思いますか? Initialize()が発生し、既定のLoad()メソッドが発生しています。したがって、3つの命令(投稿した2つの命令だけでなく)を使用してLoadメソッドを追加する必要があります。 3番目の命令は、visible = falseとvisible = trueの間でbase.Load()メソッドを呼び出すことです。 – jdweng

答えて

1

問題があなたのコントロールが読み込まれると、スタイルが適用されたとき、トリガが評価され、当初はIsControlVisiblefalseているので、最初のストーリーボードを1(デフォルト値)からOpacityをアニメーション、起動していることですしたがって、解決策は、最初のOpacityの値を0に設定することです(または、より良いことに、初期値のIsControlVisibleに対応する値に設定することをお勧めします)。あなたのスタイルに適切なセッターを追加するために十分であることを行うには:

<Style x:Key="somestyle" TargetType="Button"> 
    <Setter Property="Opacity" Value="{Binding IsControlVisible, Mode=OneTime}" /> 
    (...) 
</Style> 

そう後でIsControlVisibleの値が変化し、Opacityのみによって制御されたときにことをOneTimeへの結合モードを設定することをお勧めしますアニメーションであり、バインディングではありません。また、私はコンバーターを使用しませんでしたが、フレームワークが適切にbooldoubleに変換するほどスマートです。

+0

あなたは今この時すべてあなたでした:-)。ありがとう、それは魅力のように動作します – MegaMind

+0

@Amazing knowledge! – Ramankingdom

関連する問題