UWP ItemsControl 内容不像 WPF 中那样拉伸
Posted
技术标签:
【中文标题】UWP ItemsControl 内容不像 WPF 中那样拉伸【英文标题】:UWP ItemsControl content not stretching as in WPF 【发布时间】:2016-06-28 07:09:05 【问题描述】:我在 UWP 项目中遇到了一些我无法理解的行为,但是我在 WPF 中的实现按预期工作。
如果我有一个 StackPanel,并插入一些网格,网格会按预期拉伸以填充 StackPanel 的宽度。
<StackPanel Grid.Row="1">
<Grid Background="Blue">
<TextBlock>Item 1</TextBlock>
</Grid>
<Grid Background="Green">
<TextBlock>Item 2</TextBlock>
</Grid>
<Grid Background="Red">
<TextBlock>Item 3</TextBlock>
</Grid>
<Grid Background="Pink">
<TextBlock>Item 4</TextBlock>
</Grid>
</StackPanel>
但是,一旦我尝试引入绑定和集合,这种行为就会停止发生。
<ItemsControl ItemsSource="Binding Devices" Grid.Row="1">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Background="Violet">
<TextBlock>Hello</TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我发现了可追溯到 2010 年的类似问题,但迄今为止没有任何解决方案有效。我还发现了这里报告的关于 UWP Grid 的问题,通常用于其他环境。我尝试过使用 ListBox(在这方面的行为相同)、设置 HorizontalContentAlignment、使用样式,因为 Silverlight 用户似乎从中找到了乐趣,并改变了我表达我的 ItemsControl 的方式。到目前为止没有任何工作,我觉得 UWP 中的 XAML 有问题,因为我似乎在 WPF 中根本没有遇到任何问题。是否存在已知问题,或者我只是以错误的方式解决这个问题?
我只是想让子网格拉伸以水平填充。我应该提一下:
如果我将网格包裹在 ViewBox 中,它确实会起作用,但这是不可取的,因为它会产生其他不利影响。
如果我在 XAML 中单击层次结构中的所有内容,从 ItemsControl 开始,围绕此选择呈现的框是全宽的,一直到(不包括)DataTemplate。 DataTemplate 和 Grid 显示了一个紧密绑定的框,但如果我查看属性检查器,则 Grid 的水平对齐方式为拉伸。这让我相信 DataTemplate 正在用没有 HorizontalAlignment="Stretch" 的东西包裹网格,而我没有已知的机制来改变它。
【问题讨论】:
【参考方案1】:这种行为似乎只出现在 Visual Studio 和 Expression Blend 的设计器中。一旦在手机和桌面上构建并执行,一切似乎都可以正确呈现。
我通常与设计师有很好的经验,没想到会是这样。如果我只是忽略了设计师并取得了进步,我会更快意识到这一点。我已通过 VisualStudio 反馈工具报告了此问题。
【讨论】:
以上是关于UWP ItemsControl 内容不像 WPF 中那样拉伸的主要内容,如果未能解决你的问题,请参考以下文章
WPF - ItemsControl - 如何找到ItemTemplate中的“CheckBox”项?
WPF ItemsControl ListBox ListView比较