更改列表框C#Wpf中每个项目的样式

时间:2015-04-09 20:10:45

标签: c# wpf listbox

我想像这样更改列表框中每个项目的样式

enter image description here

但在我的情况下,我只想更改每个项目的颜色和字体样式(斜体,粗体),列表框中的项目是以编程方式添加的

我怎样才能改变每个项目的风格?

1 个答案:

答案 0 :(得分:1)

您可以为具有所有必要属性的数据项创建视图模型类,例如

class DataItem
{
    public string Text { get; set; }
    public Brush Foreground { get; set; }
    public FontStyle FontStyle { get; set; }
    public FontWeight FontWeight { get; set; }
}

并绑定到ListBox的ItemTemplate中的这些属性。下面的示例假定Items是视图模型中返回DataItem对象集合的属性。

<ListBox ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Text}"
                       Foreground="{Binding Foreground}"
                       FontStyle="{Binding FontStyle}"
                       FontWeight="{Binding FontWeight}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

如果您更喜欢使用布尔属性,例如您的项目视图模型中的IsBold,您可以添加一个ItemContainerStyle,其中包含设置相应ListBoxItem属性的DataTriggers:

<ListBox ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Text}"
                       Foreground="{Binding Foreground}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsItalic}" Value="True">
                    <Setter Property="FontStyle" Value="Italic"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding IsBold}" Value="True">
                    <Setter Property="FontWeight" Value="Bold"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>