让数据绑定列表框接受列表框项的模板化样式(从与相应样式同名的资源字典中)?
我在 Blend 4 中看到,在 SimpleStyles ResourceDictionary 文件中,"SimpleListBoxItem"的属性设置为:
d:IsControlPart="True"
但我只能在显式使用 xaml 硬编码列表框项的简单列表框项样式时使用它?
对我来说有意义的是将样式应用于列表框中的控件模板。我看到列表框中的控件模板如下所示:
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>
有没有办法在该堆栈面板中再放置一个嵌套的"ItemsHost"样式模板?也许是数据模板?
提前感谢,如果需要进一步澄清,请告诉我!
选项可用于将样式应用于ListBox
样式中的项目,ItemContainerStyle
和 ItemTemplate
。
1) ItemContainerStyle
适用于类型 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>
2)ItemTemplate
属性允许您完成重新定义每个项目的显示方式的模板,例如:
<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>