Path.Dataを直接変更

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

1
2
3
4
5
6
7
<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>

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

1
2
3
4
5
6
7
8
9
10
11
<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なんて、そんな頻繁に使わないから忘れます。