如何让数据绑定ListBox接受ListBoxItem的模板化样式(在我的ResourceDictionary中,与相应的样式同名)?
我在Blend 4中看到,在SimpleStyles ResourceDictionary文件中,“SimpleListBoxItem”的属性设置为:
d:IsControlPart="True"
但是我只能在为xaml硬编码的ListBoxItems显式使用SimpleListBoxItem样式时使用它吗?
对我来说有意义的是将样式应用于ListBox中的ControlTemplate。我看到列表框中的Control模板如下所示:
ControlTemplate TargetType="{x:Type ListBox}">
<Grid>
<Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
/>
<ScrollViewer Margin="1" Style="{DynamicResource SimpleScrollViewer}" Focusable="false" Background="{TemplateBinding Background}">
<!-- The StackPanel is used to display the children by setting IsItemsHost to be True -->
<StackPanel Margin="2" IsItemsHost="true"/>
</ScrollViewer>
</Grid>
有没有办法在该stackpanel中放置一个嵌套的“ItemsHost”样式模板?也许是DataTemplate?
在此先感谢,如果需要进一步澄清,请与我们联系!
答案 0 :(得分:3)
将样式应用于ListBox
样式ItemContainerStyle
样式ItemTemplate
和ItemContainerStyle
中,有两种选择。
1)ListBoxItem
适用于<Style TargetType="ListBoxItem" x:Key="SimpleListBoxItem">
<Setter Property="Background" Value="Green">
<!-- etc -->
</Style>
<Style TargetType="ListBox" x:Key="ListBoxStyle">
<Setter Property="ItemContainerStyle" Value="{StaticResource SimpleListBoxItem}">
</Style>
类型 - 设置样式列表中每个项目的容器:
ItemTemplate
2)<Style TargetType="ListBox" x:Key="ListBoxStyle">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Text="This is an item" />
<ContentControl Grid.Column="1" Text="{Binding}" />
<Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
属性允许您完成重新定义模板的每个项目的显示方式,例如:
{{1}}