VisualStates
いくつかを入力しようとすると、かなり一般的な問題になりますDataTemplate
。
FrameworkElement
以下のコードは正常に動作しますが、 custom などの を使用する場合のみですUserControl
。
<UserControl>
...namespaces goes here...
<Grid x:Name="rootgrid">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="States">
<Storyboard x:Key="Focused">
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="ellipse">
<EasingColorKeyFrame KeyTime="0:0:0.1" Value="#FFE90B0B"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Ellipse x:Name="ellipse"
Width="26"
Height="26"
Fill="Yellow"
SnapsToDevicePixels="True"
Stretch="Fill"
Stroke="Black"
StrokeThickness="2">
<Ellipse.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Ellipse.RenderTransform>
</Ellipse>
</Grid>
</UserControl>
しかし、コードを貼り付けようとするとDataTemplate
:
<DataTemplate x:Key="MyDataTemplate">
<Grid x:Name="rootgrid">
... Code the same as above...
</Grid>
</DataTemplate>
次に、"MyDataTemplate" をカスタム要素 (ContentTemplate
依存関係プロパティを実装するクラス) に適用します。その場合、アニメーション状態 "Focused" を使用できません。
VisualTree を介して「rootgrid」というグリッド オブジェクトを取得し、これを使用しても、次のようになります。
VisualStateManager.GoToState(rootgrid,"Focused",true);
何も起こりません ... :(
問題は、非オブジェクト用にVisualStates
実装された (アニメーション)の使用方法です。DataTemplate
FrameworkElement