2

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実装された (アニメーション)の使用方法です。DataTemplateFrameworkElement

4

1 に答える 1