WindowsRT がこの方向に進んでいるように見え、異なるコードの量を最小限に抑えたいため、トリガーとテーマの使用から VisualStateManager に切り替えようとしています。その趣旨で、Surface 2 などのタブレット デバイスの大きなマージンと、デスクトップ スキームの通常の外観のマージンとを切り替える単純なスキームを設定しようとしています。オブジェクトにプロパティを直接設定することでこれを実行できることはわかっていますが、コントロールに 15 個のラベルがある場合、すべてのラベルにマージンを設定するストーリーボードを作成することは単にサポートできません。だから私はこのコードで各ラベルのスタイルを交換しようとしています:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="DeviceStates">
<VisualState Name="Desktop"/>
<VisualState Name="TabletLandscape">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="FirstNameLabel"
Storyboard.TargetProperty="Style">
<DiscreteObjectKeyFrame KeyTime="0"
Value="{StaticResource TabletLabelStyle}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
私の検索では、Silverlight と Windows ストア アプリケーションで動作するほぼ同じパターンを示すいくつかの例を見てきました。従来の WPF でこれを試してみると、「このフリーズ可能なものはフリーズできません」というメッセージが表示されます。Reflector でコードを掘り下げ、Style が DependencyObject から派生していないため、何を凍結しようとしているのか混乱しています。ここで何が起こっているのか、誰にも手がかりがありますか?