ListViewItem ContentPresenter显示类名

时间:2017-08-16 17:42:26

标签: wpf data-binding controltemplate

我有一个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,因为实际上有更多的列(上面的代码是简单的),它看起来像是一个重复的工作......

0 个答案:

没有答案