你可以绑定IsExpanded
财产给Tag
的财产ListView
:
<Style x:Key="PropertyGroupStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander Header="{Binding Name}"
IsExpanded="{Binding Tag, RelativeSource={RelativeSource AncestorType=ListView}, TargetNullValue=true, FallbackValue=true}">
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
...并设置Tag
事件处理程序中的属性:
private void menuItemPropertyExpanderCollapse_Click(object sender, RoutedEventArgs e)
{
PropertyChangeList.Tag = false;
}
您回答了问题,但我忘记写更多细节。是的,现在我可以展开和折叠所有组,但我无法再展开单个组。这是一个全有或全无的事情。我的问题错过了一些重要的细节:-(我更新了我的问题文本。
改变AncestorType
的绑定到GroupItem
并设置Tag
各自的财产GroupItem
通过在视觉树中迭代它们:
private void menuItemPropertyExpanderCollapse_Click(object sender, RoutedEventArgs e)
{
foreach (GroupItem gi in FindVisualChildren<GroupItem>(PropertyChangeList))
gi.Tag = false;
}
private static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child))
{
yield return childOfChild;
}
}
}
}
XAML:
<Expander Header="{Binding Name}"
IsExpanded="{Binding Tag, RelativeSource={RelativeSource AncestorType=GroupItem}, TargetNullValue=true, FallbackValue=true}">
<ItemsPresenter />
</Expander>