我想像这样更改列表框中每个项目的样式
但在我的情况下,我只想更改每个项目的颜色和字体样式(斜体,粗体),列表框中的项目是以编程方式添加的
我怎样才能改变每个项目的风格?
答案 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>