2016-06-25 2 views
0

ViewModelにIsDoneという変数があります。IsDoneが値を変更したときに新しいStoryboardをアタッチしたいと思います。読み込みプロセスのように見えます。ボタンをクリックして何かを待ってアニメーションを開始し、IsDoneを設定します。 StopAniを呼び出すのは正しいです。問題はborder3です。IsDoneがtrueの場合は表示されません。アイデアはありがとう、ありがとうございます。 ボタンテンプレート:DataTriggerと新しいストーリーボードを添付

<Setter Property="Template"> 
<Setter.Value> 
<ControlTemplate TargetType="{x:Type ToggleButton}"> 
<Grid> 
<Canvas> 
<Ellipse x:Name="border1" Width="100" Height="100"/> 
<Ellipse x:Name="border2" Width="90" Height="90"/> 
<Ellipse x:Name="border3" Width="50" Height="50"/> 
</Canvas> 
<ContentPresenter /> 
</Grid> 
<ControlTemplate.Triggers> 
    <DataTrigger Binding="{Binding IsDone}" Value="false"> 
     <DataTrigger.EnterActions> 
     <BeginStoryboard Storyboard="{StaticResource StartAni}"/> 
     </DataTrigger.EnterActions> 
    <DataTrigger Binding="{Binding IsDone}" Value="true"> 
    <DataTrigger.EnterActions> 
    <BeginStoryboard Storyboard="{StaticResource StopAni}"/> 
    </DataTrigger.EnterActions> 
    </DataTrigger> 
</ControlTemplate.Triggers> 
</ControlTemplate> 
</Setter.Value> 
</Setter> 

StartAni:

<Storyboard x:Key="StartAni"> 
    <DoubleAnimation 
     Storyboard.TargetName="border2" 
     Storyboard.TargetProperty="StrokeThickness" To="0" Duration="0:0:0.2"/> 
    </DoubleAnimation> 
    <ColorAnimation 
     Storyboard.TargetName="border2" 
     Storyboard.TargetProperty="(Ellipse.Stroke).(SolidColorBrush.Color)" 
     To="Grey" Duration="0"> 
    </ColorAnimation> 
    <DoubleAnimation 
     Storyboard.TargetName="border3" 
     Storyboard.TargetProperty="StrokeThickness" 
     From="0.0" To="5.0" Duration="0"/> 
</Storyboard> 

StopAni:

<Storyboard x:Key="StopAni"> 
    <DoubleAnimation 
     Storyboard.TargetName="border2" 
     Storyboard.TargetProperty="StrokeThickness" To="5" Duration="0:0:2.5"/> 
    <ColorAnimation 
     Storyboard.TargetName="border2" 
     Storyboard.TargetProperty="(Ellipse.Stroke).(SolidColorBrush.Color)" 
     To="LightGreen" Duration="0"/> 
    <DoubleAnimation 
     Storyboard.TargetName="border3" 
     Storyboard.TargetProperty="StrokeThickness" 
     From="5.0" To="0.0" Duration="0:0:0.2"/> 
</Storyboard> 

のViewModel:

bool isDone; 
public bool IsDone { 
    set { 
     isDone = value; 
     OnPropertyChanged("IsDone"); 
    } 
    get { 
     return isDone; 
    } 
} 
+0

完全なXAMLはこれをしたいと思います。ここで、DataTriggersを宣言した場所。 – AnjumSKhan

+0

yes、buton Templateの3つの省略記号: .... @ AnjumSKhan – Jandy

+0

正しく質問を更新しましたplz – AnjumSKhan

答えて

0

であなたのResourcesを定義しますそれ自体。 そして、Transparentのようないくつかの初期値をStrokeに割り当ててください。

また、Durationをいくつかの目立つ値に増やしてください。あなたはスタイルで定義されたストーリーボードにTargetNameはを指定することはできません

<Style TargetType="ToggleButton" x:Key="BtnKey"> 
      <Style.Setters> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type ToggleButton}"> 
          <ControlTemplate.Resources> 
           <Storyboard x:Key="StartAni"> 
            <DoubleAnimation 
             Storyboard.TargetName="border2" 
             Storyboard.TargetProperty="StrokeThickness" To="0" Duration="0:0:0.2"/> 
            <ColorAnimation 
             Storyboard.TargetName="border2" 
             Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" 
             To="Red" Duration="0"/> 
            <DoubleAnimation 
              Storyboard.TargetName="border3" 
              Storyboard.TargetProperty="StrokeThickness" 
              From="0.0" To="5.0" Duration="0"/> 
           </Storyboard> 

           <Storyboard x:Key="StopAni"> 
            <DoubleAnimation 
             Storyboard.TargetName="border2" 
             Storyboard.TargetProperty="StrokeThickness" To="5" Duration="0:0:2.5"/> 
            <ColorAnimation 
             Storyboard.TargetName="border2" 
             Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" 
             To="LightGreen" Duration="0"/> 
            <DoubleAnimation 
             Storyboard.TargetName="border3" 
             Storyboard.TargetProperty="StrokeThickness" 
             From="5.0" To="0.0" Duration="0:0:0.2"/> 
           </Storyboard> 

          </ControlTemplate.Resources> 
          <Grid> 
           <Canvas> 

            <Ellipse x:Name="border1" Width="100" Height="100" Stroke="Transparent"/> 
            <Ellipse x:Name="border2" Width="90" Height="90" Stroke="Transparent"/> 
            <Ellipse x:Name="border3" Width="50" Height="50" Stroke="Transparent"/> 
           </Canvas> 
           <ContentPresenter /> 
          </Grid> 
          <ControlTemplate.Triggers> 
           <DataTrigger Binding="{Binding IsDone}" Value="false"> 
            <DataTrigger.EnterActions> 
             <BeginStoryboard Storyboard="{StaticResource StartAni}"> 

             </BeginStoryboard> 
            </DataTrigger.EnterActions> 
           </DataTrigger> 
           <DataTrigger Binding="{Binding IsDone}" Value="true"> 
             <DataTrigger.EnterActions> 
             <BeginStoryboard Storyboard="{StaticResource StopAni}"> 

             </BeginStoryboard> 
            </DataTrigger.EnterActions> 
            </DataTrigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style.Setters> 
     </Style> 
+0

作品[email protected] – Jandy

+0

@Jandy何が問題だったか – AnjumSKhan

+0

私のために加工されました。もう一度@AnjumSKhan – Jandy

関連する問題