"MaxColumns"と呼ばれる依存プロパティを持つカスタムItemsPanelを持つItemsControlを含むUserControlがあります。カスタムパネルの "MaxColumns"プロパティをアニメーション化できるVisualState(UserControlレベル)を定義したいと思います。本質的にはWPF VisualStateManager - テンプレートされた子の中でプロパティをアニメーション化する方法
、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でこれを直接行うことができなくてはいけないと思いますか?
あなたのXAMLコードは右、いくつかのControlTemplateの一部ですか? – Vlad
実際それはUserControlの一部です。 "LayoutRoot"グリッドは、UserControlのルートコントロールです。 – Jordan0Day