UWP ItemsControl 内容不像 WPF 那样拉伸
UWP ItemsControl content not stretching as in WPF
我在 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 年的类似问题报告,但 none 的解决方案迄今为止有效。我还发现了此处针对 UWP Grid 通常在其他情况下使用的报告问题。我尝试过使用 ListBox(在这方面表现相同)、设置 HorizontalContentAlignment、使用 Silverlight 用户喜欢的样式,以及改变我表达 ItemsControl 的方式。到目前为止没有任何效果,我觉得 UWP 中的 XAML 有问题,因为我似乎在 WPF 中根本没有遇到任何问题。是否存在已知问题,或者我只是以错误的方式解决这个问题?
我只是想让子网格拉伸以水平填充。我应该提到:
如果我将网格包裹在 ViewBox 中,它确实会起作用,但这是不可取的,因为它会产生其他不利影响。
如果我单击 XAML 中层次结构中的所有内容,从 ItemsControl 开始,围绕此选择呈现的框一直到(不包括)DataTemplate 都是全宽的。 DataTemplate 和 Grid 显示一个紧密绑定的框,但如果我在 属性 检查器中查看,Grid 的水平对齐方式为拉伸。这让我相信 DataTemplate 正在用没有 HorizontalAlignment="Stretch" 的东西包裹网格,而且我没有已知的机制来改变它。
此行为似乎只出现在 Visual Studio 和 Expression Blend 的设计器中。一旦在 Phone 和桌面上构建并执行,一切似乎都能正确呈现。
总的来说,我和设计师有很好的体验,没想到会是这样。如果我只是忽略设计师并取得进步,我会更快地意识到这一点。我已经通过 VisualStudio 反馈工具报告了这个问题。
我在 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 年的类似问题报告,但 none 的解决方案迄今为止有效。我还发现了此处针对 UWP Grid 通常在其他情况下使用的报告问题。我尝试过使用 ListBox(在这方面表现相同)、设置 HorizontalContentAlignment、使用 Silverlight 用户喜欢的样式,以及改变我表达 ItemsControl 的方式。到目前为止没有任何效果,我觉得 UWP 中的 XAML 有问题,因为我似乎在 WPF 中根本没有遇到任何问题。是否存在已知问题,或者我只是以错误的方式解决这个问题?
我只是想让子网格拉伸以水平填充。我应该提到:
如果我将网格包裹在 ViewBox 中,它确实会起作用,但这是不可取的,因为它会产生其他不利影响。
如果我单击 XAML 中层次结构中的所有内容,从 ItemsControl 开始,围绕此选择呈现的框一直到(不包括)DataTemplate 都是全宽的。 DataTemplate 和 Grid 显示一个紧密绑定的框,但如果我在 属性 检查器中查看,Grid 的水平对齐方式为拉伸。这让我相信 DataTemplate 正在用没有 HorizontalAlignment="Stretch" 的东西包裹网格,而且我没有已知的机制来改变它。
此行为似乎只出现在 Visual Studio 和 Expression Blend 的设计器中。一旦在 Phone 和桌面上构建并执行,一切似乎都能正确呈现。
总的来说,我和设计师有很好的体验,没想到会是这样。如果我只是忽略设计师并取得进步,我会更快地意识到这一点。我已经通过 VisualStudio 反馈工具报告了这个问题。