gpt4 book ai didi

c# - WPF更新ContainerStyleSelector样式选择

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:48 25 4
gpt4 key购买 nike

我正在寻找更新 GroupStyle 的最佳方法。

CS:

我有一个 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:

<tsk:CountBasedGroupStyleSelector x:Key="groupStyleSelector" SingleItemGroupStyle="{StaticResource SingleItemGroupStyle}" 
MultipleItemGroupStyle="{StaticResource MultipleItemGroupStyle}" />

<TreeView>
<TreeView.GroupStyle>
<GroupStyle x:Name="groupStyle" ContainerStyleSelector="{StaticResource groupStyleSelector}" />
</TreeView.GroupStyle>
</TreeView>

我不想在发生变化时再次触发 GroupStyleSelector 的选择,例如,当某个项目被删除或从组中添加时。

知道如何做到这一点吗?

仅供引用,我想在每个 GroupItem 上使用 AttachedProperty Bound 来装配一些东西

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>

最佳答案

对于初学者,我使用反射器查看了 CollectionViewGroup。

CollectionViewGroup是 CollectionViewSource 应用于 GroupItem 的 DataContext它创建的 GroupItem。

它有一个 ItemsCount 属性并实现了 INotifyPropertyChanged。

例如,所有只包含一个项目的项目现在都是红色的。

        <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>

关于c# - WPF更新ContainerStyleSelector样式选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25481375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com