可視性を変更できるコントロールに視覚効果(フェードイン、フェードアウトなど)を追加したいとします。Silverlight:可視状態と不可視状態の間に視覚的な遷移を追加します。
どこから始めたらいいかわかりません。私はVisualStateManagerとVisualTransformについて少し読んだことがありますが、それが可能かどうかはまだ分かりません。手伝って頂けますか ?
ありがとうございました
可視性を変更できるコントロールに視覚効果(フェードイン、フェードアウトなど)を追加したいとします。Silverlight:可視状態と不可視状態の間に視覚的な遷移を追加します。
どこから始めたらいいかわかりません。私はVisualStateManagerとVisualTransformについて少し読んだことがありますが、それが可能かどうかはまだ分かりません。手伝って頂けますか ?
ありがとうございました
あなたが望むのは可能です。
ShowState
とHideState
を定義する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がアプリケーションでエラーを見つけた可能性があります。
+1 DiscreteObjectKeyFramesのKeyTimeが正しいことは確かですか? – AnthonyWJones
@Anthony - 今言及していないかもしれません。コード*は、私たちのアプリケーションでは動作するように見えますが、期待どおりに動作するかダブルチェックしていません。 – ChrisF
期待どおりにフェードしません。 BeginTimeおよびDurationプロパティを失い、すべてのKeyTimeプロパティを1秒に設定できます。期待される動作を得ることができます。 – AnthonyWJones