我使用常规StackPanel(在DataTemplate中)堆叠了一些TextBlock元素。
将其用作ContentControl的ContentTemplate时,布局将按预期显示。但是,如果我将DataTemplate用作ListView的ItemTemplate,则会忽略一些属性(TextLineBounds,但也包括Margin)。
在下面的屏幕截图中,我放置了一个ContentControl和一个ListView,其中一个项目彼此相邻,以说明问题。为了使问题更加明显,我在TextBlocks的左侧包含了彩色网格。
我尝试过使用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>
答案 0 :(得分:1)
默认FontFamily
在ListViewItem
(它是“Segoe UI”而非“全局用户界面”)中有所不同,因此如果您希望它在两种情况下都能正常工作 - 您需要将字体明确指定为“Segoe UI”或“全局用户界面”,它的工作原理相同。
似乎BaselineOffset
是这两种字体之间的差异之一。