【发布时间】:2014-05-14 08:52:40
【问题描述】:
问题描述
我使用常规 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>
【问题讨论】:
-
为什么你的
ListView里面有一个Grid? -
否则,我可以看到。这可能是一个错误。我去问问。
-
顺便说一句,它在
ItemsControl中渲染得很好。 -
我注意到 BaselineOffset 在这两种情况下具有不同的值...
-
@FilipSkakun 网格是我能想到的最简单的项目,它会导致 ListView 显示一个项目。现在我会使用
test
标签: listview winrt-xaml