我有一个ListView,它绑定到我的ViewModel中的一组对象。
一切都很好,但我想更改列表中显示的项目的字体大小。
所以我有
<ListView ItemsSource="{Binding MyItems}" Grid.Row="1" Margin="0, 0, 0, 32">
<ListView.View>
<GridView AllowsColumnReorder="false">
<GridViewColumn DisplayMemberBinding="{Binding Path=Id}" Header="Id" />
<GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Header="Name" />
</GridView>
</ListView.View>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="FontSize" Value="12" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
然而,我在其他地方
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontSize" Value="18" />
</Style>
因此忽略ListView.ItemContainerStyle
中的字体大小。
此问题的答案:Overriding implicit styles in nested controls - 通过更改ContentPresenter显示如何覆盖此问题。所以我想做类似的事情。
我将自己的风格改为......
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="FontSize" Value="12" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<ContentPresenter
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}">
<ContentPresenter.Resources>
<Style
TargetType="{x:Type TextBlock}"
BasedOn="{x:Null}" />
</ContentPresenter.Resources>
</ContentPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
现在,它尊重上面代码段中设置的FontSize
,但不是在列表中显示实际内容,而是显示类的名称! (MyNamespace.MyItemsModel
)
我见过类似的问题,但是它们涉及每个人DataTemplate
的{{1}}。我宁愿不设置每列的DataTemplate,因为实际上有更多的列(上面的代码是简单的),它看起来像是一个重复的工作......