ListView忽略项目模板的部分样式 问题说明

ListView忽略项目模板的部分样式 问题说明,listview,winrt-xaml,Listview,Winrt Xaml,我已经使用一个常规的StackPanel(在DataTemplate中)堆叠了一些TextBlock元素 将其用作ContentControl的ContentTemplate时,布局将按预期显示。但是,如果我将DataTemplate用作ListView的ItemTemplate,一些属性将被忽略(TextLineBounds,但也包括Margin) 在下面的屏幕截图中,我放置了一个ContentControl和一个ListView,其中一个项目相邻以说明问题。为了使问题更加明显,我在文本块的左

我已经使用一个常规的StackPanel(在DataTemplate中)堆叠了一些TextBlock元素

将其用作ContentControl的ContentTemplate时,布局将按预期显示。但是,如果我将DataTemplate用作ListView的ItemTemplate,一些属性将被忽略(TextLineBounds,但也包括Margin)

在下面的屏幕截图中,我放置了一个ContentControl和一个ListView,其中一个项目相邻以说明问题。为了使问题更加明显,我在文本块的左侧添加了彩色网格

我尝试过的事情 我尝试了几种使用Blend的方法。关闭没有帮助的ItemContainerStyle、ItemsPanel和ControlTemplate。 我可以手动使用ItemsControl和进行选择等,但我希望避免这种情况

复制问题 以下UserControl可用于在空白winrt项目中重现问题

<UserControl
    x:Class="ListViewRepro.DropInRepro"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="60"
    d:DesignWidth="300">
    <UserControl.Resources>
        <DataTemplate x:Key="ItemTemplate">
            <Grid Width="150">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="50" />
                    <ColumnDefinition Width="200" />
                </Grid.ColumnDefinitions>
                <StackPanel>
                    <Grid Height="18" Background="Yellow" />
                    <Grid Height="14" Background="Orange" />
                    <Grid Height="10" Background="GreenYellow" />
                </StackPanel>
                <StackPanel Grid.Column="1">
                    <TextBlock FontSize="20" Text="Header"
                               TextLineBounds="TrimToBaseline" />
                    <TextBlock FontSize="14.6" Text="Subheader"
                               TextLineBounds="TrimToBaseline" />
                    <TextBlock>Title</TextBlock>
                </StackPanel>
            </Grid>
        </DataTemplate>
    </UserControl.Resources>
    <StackPanel Orientation="Horizontal">
        <ContentControl ContentTemplate="{StaticResource ItemTemplate}" />
        <ListView ItemTemplate="{StaticResource ItemTemplate}">
            <x:String>dummy item</x:String>
        </ListView>
    </StackPanel>
</UserControl>

标题
虚拟项

默认的
FontFamily
ListViewItem
中是不同的(它是“Segoe UI”而不是“全局用户界面”),因此如果您希望它在这两种情况下都能工作,那么您需要将字体显式指定为“Segoe UI”或“全局用户界面”,并且它的工作方式相同


似乎
基线偏移量
是这两种字体之间的区别之一。

为什么
列表视图中有
网格
?否则,我可以看到。这可能是一只虫子。顺便说一句,它在
ItemsControl
中呈现良好。我注意到基线偏移量在这两种情况下有不同的值…@FilipSkakun网格是我能想到的最简单的项目,它会导致ListView显示一个项目。现在我需要使用testI将默认FontSize(重新)设置为10.6666。这与设置FontFamily一起解决了我的问题。