「MaxColumns」と呼ばれる依存関係プロパティを持つ、カスタム ItemsPanel を持つ ItemsControl を含む UserControl があります。カスタム パネルの「MaxColumns」プロパティをアニメーション化できる VisualState (UserControl レベル) を定義したいと思います。
基本的に、XAML は次のようになります。
<Grid x:Name="LayoutRoot">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="MyCoolState">
<VisualState x:Name="Normal" />
<VisualState x:Name="NotNormal">
<Storyboard>
<Int32Animation Duration="0"
Storyboard.TargetName="Details"
Storyboard.TargetProperty="(ItemsControl.ItemsPanel).(local:CoolPanel.MaxColumns)"
To="4" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateManager>
<ItemsControl x:Name="Details">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<local:CoolPanel x:Name="MyCoolPanel"
MaxColumns="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
しかし、私は一生、アニメーションの正しい構文を理解できませんか? 上記の構文を使用すると、「'ItemsPanel' プロパティがパス '(0).(1)' の DependencyObject を指していません」というエラーが表示されます。これは、技術的にItemsPanelTemplateを指しているためだと思いますか?
Storyboard.TargetName プロパティで "MyCoolPanel" を直接参照すると、Name スコープに関するエラーが発生します (おそらく "MyCoolPanel" が LayoutRoot の名前スコープにないため)。「TargetName」で名前スコープを修飾する方法があるかどうかわかりません。
誰かがこれに対する解決策を持っていますか? カスタム添付プロパティに頼らずに実行できるように思えますか? つまり、添付プロパティに反対しているわけではありませんが、これを XAML で直接実行できるようにする必要があると思いますか?