2016-04-01 16 views
0

私はアニメーションを行うためにストーリーボードを使用します。他のビューからターゲット要素でstoryboardを使用するにはどうすればいいですか?

<Button.Triggers> 
       <EventTrigger RoutedEvent="Button.Click"> 
        <BeginStoryboard> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetName="Studio" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
          <DoubleAnimation Storyboard.TargetName="Animation" Storyboard.TargetProperty="Opacity" From="0" To="0.3" Duration="0:0:2"/> 
          <DoubleAnimation Storyboard.TargetName="Record" Storyboard.TargetProperty="Opacity" From="0" To="0.3" Duration="0:0:2"/> 
          <DoubleAnimation Storyboard.TargetName="Info" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
          <DoubleAnimation Storyboard.TargetName="info_content" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </Button.Triggers> 

が、ターゲットは別のビューのXAMLです。私はそれらにアクセスするためにViewModelを使うべきだと思っていますが、私はもう少しヒントが必要です。

答えて

1

私はButtonUserControlを作成し、MainWindowからそのボタンをanimateしようとしました。

問題:Storyboard.Targetプロパティに使用できるように、アニメーション化するボタンの参照が必要です。これは適切なハンドラを使用して解決できます。私はWindowのLoadedイベントを使用して、FindName()メソッドをUserControlとして使用しました。

FindName()は、DPを使用して公開可能なオブジェクト、またはINPCがサポートする通常のプロパティを返します。

この参照は、Storyboard.Targetプロパティにバインドされています。

メインウィンドウ:

 <Button ...> 
      <Button.Triggers> 
       <EventTrigger RoutedEvent="Button.Click"> 
        <BeginStoryboard> 
         <Storyboard Name="Sb1"> 
          <DoubleAnimation To="150.0" 
            Duration="0:0:2" 
            Storyboard.Target="{Binding TargetBtn, Mode=OneWay}" 
            Storyboard.TargetProperty="Width"/> 
         </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger> 
      </Button.Triggers> 
     </Button> 

コード、

WindowのセットのDataContext、あなたはまた、このアプローチを使用することができますthis.DataContext = this;

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    // TargetBtn is a DP 
    TargetBtn = (Button)UC1.FindName("Btn1"); 
} 

Dynamically changing TargetName、ここにあなたが変更する必要がありますTargetプロパティy TargetNameプロパティの代わりに。

0

ちょうどViewの取引です。アニメーション、スタイリングなどのすべてのUIアクションはViewで行う必要があります。 ViewModelは約Viewを知らないはずです。 App.xamlファイルにアプリケーション用のすべてのButtonの新しいスタイルを作成する方が良いです。コンクリートのためにこのスタイルを使用したい場合Buttonちょうどx:Keyプロパティを使用してください。

私は例を示しましょう:

<Application.Resources> 
    <Style TargetType="Button" x:Key="EventTriggerButton" > 
     <Style.Triggers>    
      <EventTrigger RoutedEvent="Button.Click"> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation Storyboard.TargetName="Studio" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
         <DoubleAnimation Storyboard.TargetName="Animation" Storyboard.TargetProperty="Opacity" From="0" To="0.3" Duration="0:0:2"/> 
         <DoubleAnimation Storyboard.TargetName="Record" Storyboard.TargetProperty="Opacity" From="0" To="0.3" Duration="0:0:2"/> 
         <DoubleAnimation Storyboard.TargetName="Info" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
         <DoubleAnimation Storyboard.TargetName="info_content" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger>    
     </Style.Triggers> 
    </Style> 
</Application.Resources> 
関連する問題