ListBox / ListBoxItem用于BoundData样式模板澄清WPF XAML

时间:2012-12-12 18:26:04

标签: wpf listbox styles controltemplate listboxitem

如何让数据绑定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?

在此先感谢,如果需要进一步澄清,请与我们联系!

1 个答案:

答案 0 :(得分:3)

将样式应用于ListBox样式ItemContainerStyle样式ItemTemplateItemContainerStyle中,有两种选择。

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