[英]WPF update ContainerStyleSelector style selection
I'm looking for the best way to update a GroupStyle . 我正在寻找更新GroupStyle的最佳方法。
CS : CS:
I Have a GroupStyleSelector (Simplified) : 我有一个GroupStyleSelector(简体):
public class CountBasedGroupStyleSelector : StyleSelector
{
public Style SingleItemGroupStyle { get; set; }
public Style MultipleItemGroupStyle { get; set; }
public override Style SelectStyle(object item, DependencyObject container)
{
var group = item as CollectionViewGroup;
return group.ItemCount == 1 ? SingleItemGroupStyle : MultipleItemGroupStyle;
}
}
XAML : XAML:
<tsk:CountBasedGroupStyleSelector x:Key="groupStyleSelector" SingleItemGroupStyle="{StaticResource SingleItemGroupStyle}"
MultipleItemGroupStyle="{StaticResource MultipleItemGroupStyle}" />
<TreeView>
<TreeView.GroupStyle>
<GroupStyle x:Name="groupStyle" ContainerStyleSelector="{StaticResource groupStyleSelector}" />
</TreeView.GroupStyle>
</TreeView>
I wan't to trigger the GroupStyleSelector's selection again when something changes , for example when an item is removed or add from a group . 当某些更改(例如,从组中删除或添加项目)时,我不会再次触发GroupStyleSelector的选择。
any idea's how this can be done ? 任何想法如何做到这一点?
FYI , i thought of rigging something up using an AttachedProperty Bound on each GroupItem 仅供参考,我想在每个GroupItem上使用AttachedProperty Bound绑定一些东西
GroupItemStyles : (Simplified) GroupItemStyles :(简化)
<Style x:Key="MultipleItemGroupStyle" TargetType="GroupItem">
<Setter Property="Padding" Value="0,0,1,0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<Grid>
<Border Margin="{TemplateBinding Padding}" x:Name="grpOverlayBd" CornerRadius="4" Background="#FFAAAAAA" BorderThickness="0" BorderBrush="Transparent" >
<ItemsPresenter />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SingleItemGroupStyle" TargetType="GroupItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<ItemsPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
For starters i looked at CollectionViewGroup using reflector . 首先,我使用反射器查看了CollectionViewGroup。
CollectionViewGroup is the DataContext applied by CollectionViewSource to a GroupItem GroupItem it creates. CollectionViewGroup是CollectionViewSource应用于它创建的GroupItem GroupItem的DataContext。
It has a ItemsCount property and it implements INotifyPropertyChanged. 它具有ItemsCount属性,并实现INotifyPropertyChanged。
For example all items containing just one item are now red . 例如,所有仅包含一项的项目现在变为红色。
<TreeView>
<TreeView.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="GroupItem">
<Setter Property="Background" Value="#FFAAAAAA" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GroupItem">
<Grid>
<Border Background="{TemplateBinding Background}" >
<ItemsPresenter />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ItemCount, Mode=OneWay}" Value="1">
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</TreeView.GroupStyle>
</TreeView>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.