2010-12-03 13 views
5

可視性を変更できるコントロールに視覚効果(フェードイン、フェードアウトなど)を追加したいとします。Silverlight:可視状態と不可視状態の間に視覚的な遷移を追加します。

どこから始めたらいいかわかりません。私はVisualStateManagerとVisualTransformについて少し読んだことがありますが、それが可能かどうかはまだ分かりません。手伝って頂けますか ?

ありがとうございました

答えて

6

あなたが望むのは可能です。

ShowStateHideStateを定義するVisualStateManagerが必要です。これらは、可視性を制御するStoryboardを定義します。

その後、アニメーションで "ShowState" に送信するためにあなたの要素に

VisualStateManager.GoToState(uiElement, "ShowState", true); 

を呼び出します。状態名を "HideState"に置き換えると、要素が非表示になります。

VisualStateManagerで使用するXAMLは以下のとおりです。不透明度もアニメーション化するので、フェードイン/フェードアウトします。これらの

<VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="VisualStates"> 
      <VisualState x:Name="ShowState"> 
       <Storyboard> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" 
                Storyboard.TargetProperty="(UIElement.Opacity)"> 
         <EasingDoubleKeyFrame KeyTime="00:00:01" 
               Value="1" /> 
        </DoubleAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" 
                Storyboard.TargetProperty="(UIElement.Visibility)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:00"> 
          <DiscreteObjectKeyFrame.Value> 
           <Visibility>Visible</Visibility> 
          </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrame> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </VisualState> 
      <VisualState x:Name="HideState"> 
       <Storyboard> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" 
                Storyboard.TargetProperty="(UIElement.Opacity)"> 
         <EasingDoubleKeyFrame KeyTime="00:00:01" 
               Value="0" /> 
        </DoubleAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" 
                Storyboard.TargetProperty="(UIElement.Visibility)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:01"> 
          <DiscreteObjectKeyFrame.Value> 
           <Visibility>Collapsed</Visibility> 
          </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrame> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 

NOTEKeyTime値は、アプリケーションのための微調整が必​​要な場合があります。これらをもう一度見て、 "HideState"時間が両方とも0であることがわかります。これは、あなたが望む効果が得られない場合があります。 AnthonyWJonesがアプリケーションでエラーを見つけた可能性があります。

+0

+1 DiscreteObjectKeyFramesのKeyTimeが正しいことは確かですか? – AnthonyWJones

+0

@Anthony - 今言及していないかもしれません。コード*は、私たちのアプリケーションでは動作するように見えますが、期待どおりに動作するかダブルチェックしていません。 – ChrisF

+0

期待どおりにフェードしません。 BeginTimeおよびDurationプロパティを失い、すべてのKeyTimeプロパティを1秒に設定できます。期待される動作を得ることができます。 – AnthonyWJones

関連する問題