ListView忽略项目模板样式的一部分

时间:2014-05-14 08:52:41

标签: listview winrt-xaml

问题描述

我使用常规StackPanel(在DataTemplate中)堆叠了一些TextBlock元素。

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

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

ContentControl on the left (style ok) vs ItemTemplate on the right side (TextLineBounds property is ignored)

我尝试过的事情

我尝试过使用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>

1 个答案:

答案 0 :(得分:1)

默认FontFamilyListViewItem(它是“Segoe UI”而非“全局用户界面”)中有所不同,因此如果您希望它在两种情况下都能正常工作 - 您需要将字体明确指定为“Segoe UI”或“全局用户界面”,它的工作原理相同。

似乎BaselineOffset是这两种字体之间的差异之一。