1

如何让数据绑定 ListBox 接受 ListBoxItem 的模板样式(从我的 ResourceDictionary 中与相应样式同名)?

我在 Blend 4 中看到,在 SimpleStyles ResourceDictionary 文件中,“SimpleListBoxItem”的属性设置为:

 d:IsControlPart="True"

但是我只能在为 xaml 硬编码 ListBoxItems 显式使用 SimpleListBoxItem 样式时使用它?

对我来说有意义的是将样式应用于 ListBox 中的 ControlTemplate。我看到列表框中的控件模板如下所示:

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”样式模板?也许是一个数据模板?

提前致谢,如果需要进一步说明,请告诉我!

4

1 回答 1

3

有两个选项可用于从样式中将样式应用于项目ListBoxItemContainerStyle以及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>
于 2012-12-12T19:54:22.970 回答