我正在尝试创建一个Style,它将为我的ListBox控件设置GroupStyle属性但是我收到编译时错误:
The Property Setter 'GroupStyle' cannot be set because it does not have an accessible set accessor.
My Style setter看起来像这样:
<Setter Property="ListBox.GroupStyle">
<Setter.Value>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</Setter.Value>
</Setter>
是否有解决此问题的方法,而且,如果此属性没有setter,那么我们如何能够在XAML中使用property-setter语法来首先定义内联? (还是WPF新手)
答案 0 :(得分:3)
我只是想出了答案 - 这是因为XAML编译器基于映射到我刚才记住的内容的属性的类型来处理元素标记之间的任何内容!
如果属性是ContentControl,那么您在两个标记之间定义的元素将被分配给该Content属性,但是,如果该元素是IList的实例(这是GroupStyle的实例),则.NET实际调用。在封面下面添加()
在这种情况下,GroupStyle实际上是一个ObservableCollection,因此是一个IList,因此我们实际上并没有分配给GroupStyle对象,而是添加到集合中。
换句话说,元素标记之间由内容表示的属性类型(通过控件的ContentProperty属性映射)会影响XAML编译器解释它的方式(直接赋值或调用.Add())< / p>
答案 1 :(得分:1)
//set you datatemplate as a resource
<DataTemplate x:Key="categoryTemplate">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
//set header template binding to staticresource
<ListBox Name="lst">
<ListBox.GroupStyle>
<GroupStyle HeaderTemplate="{StaticResource categoryTemplate}" />
</ListBox.GroupStyle>
</ListBox>
答案 2 :(得分:1)
你可以接下来:
<ListBox.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource listContainerStyle}"/>
</ListBox.GroupStyle>
而不是
<Style x:Key="listContainerStyle" TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander Header="{Binding Name}" IsExpanded="True">
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
阿维。
答案 3 :(得分:0)
为了更好地理解 你可以在代码中添加groupstyle(这是XAML所做的)
GroupStyle g = new GroupStyle();
ListBox ls = new ListBox();
ls.GroupStyle.Add(g);
但您无法设置GroupStyle
GroupStyle g = new GroupStyle();
ListBox ls = new ListBox();
ls.GroupStyle=g;//error because GroupStyle has only a getter