У меня есть UserControl, который содержит ItemsControl с настраиваемой панелью ItemsPanel со свойством зависимости под названием «MaxColumns». Я хотел бы определить VisualState (на уровне UserControl), который может анимировать свойство «MaxColumns» на пользовательской панели.
По сути, 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 не указывает на объект DependencyObject в пути« (0). (1) »». Я предполагаю, что это потому, что технически он указывает на ItemsPanelTemplate?
Если я ссылаюсь на «MyCoolPanel» непосредственно в свойстве Storyboard.TargetName, я получаю ошибку об области действия имени (предположительно потому, что «MyCoolPanel» отсутствует в области имен LayoutRoot). Я не знаю, есть ли способ определить область имени в "TargetName"?
У кого-нибудь есть решение для этого? Похоже на то, что должен быть выполнимым без использования пользовательских свойств? Я имею в виду, я не против вложенных свойств, но я чувствую, что вы должны быть в состоянии сделать это непосредственно в XAML?