A certain engineer "COMPLEX"

開発メモ その12 VisualStateManagerでPath.Dataを変更する

Path.Dataを直接変更


掲題の通りですが、VisualStateManagerでボタンのアイコンを変えようと下記のように指定すると例外を投げて落ちます。
アイコンの変更をしたいからと、ボタンの表示を切り替えてアイコンを変更するような逃げようとした時、ぶつかった問題です。


<VisualState x:Name="Movie">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="_MovieFileOpenButtonIcon" Storyboard.TargetProperty="Data">
<DiscreteObjectKeyFrame KeyTime="00:00:00" Value="M7.9999993,48 L7.9999993,56.75 16.499999,56.75 16.499999,48 z M7.9999993,31.5 L7.9999993,41.25 16.499999,41.25 16.499999,31.5 z M7.9999993,15.25 L7.9999993,24.75 16.499999,24.75 16.499999,15.25 z M56.999999,0.5 L64.499999,0.5 64.499999,72 56.999999,72 z M0.5,0.5 L7.9999993,0.5 7.9999993,8.5 16.499999,8.5 16.499999,0.5 47.249999,0.5 47.249999,8.5 56.249999,8.5 56.249999,15.25 47.249999,15.25 47.249999,24.75 56.249999,24.75 56.249999,31.5 47.249999,31.5 47.249999,41.25 56.249999,41.25 56.249999,48 47.249999,48 47.249999,56.75 56.249999,56.75 56.249999,63.5 47.249999,63.5 47.249999,72 16.499999,72 &#10;16.499999,63.5 7.9999993,63.5 7.9999993,72 0.5,72 z" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>

正直、上の方がストレートなのですが、文字列を適切に変換するように指示がないので落ちるから仕方ありません。
正しくは、


<VisualState x:Name="Movie">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="_MovieFileOpenButtonIcon" Storyboard.TargetProperty="Data">
<DiscreteObjectKeyFrame KeyTime="00:00:00">
<DiscreteObjectKeyFrame.Value>
<Geometry>M7.9999993,48 L7.9999993,56.75 16.499999,56.75 16.499999,48 z M7.9999993,31.5 L7.9999993,41.25 16.499999,41.25 16.499999,31.5 z M7.9999993,15.25 L7.9999993,24.75 16.499999,24.75 16.499999,15.25 z M56.999999,0.5 L64.499999,0.5 64.499999,72 56.999999,72 z M0.5,0.5 L7.9999993,0.5 7.9999993,8.5 16.499999,8.5 16.499999,0.5 47.249999,0.5 47.249999,8.5 56.249999,8.5 56.249999,15.25 47.249999,15.25 47.249999,24.75 56.249999,24.75 56.249999,31.5 47.249999,31.5 47.249999,41.25 56.249999,41.25 56.249999,48 47.249999,48 47.249999,56.75 56.249999,56.75 56.249999,63.5 47.249999,63.5 47.249999,72 16.499999,72 &#10;16.499999,63.5 7.9999993,63.5 7.9999993,72 0.5,72 z</Geometry>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>

になります。
このとき、KeyTimeの指定を忘れるとアイコンの変更にタイムラグが発生します。

Conclusion


VisualStateなんて、そんな頻繁に使わないから忘れます。

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。