我在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网格中报告的问题,在其他环境中使用。我尝试使用ListBox(在这方面表现相同),设置HorizontalContentAlignment,使用样式,因为Silverlight用户似乎已经找到了这样做的快乐,并改变了我表达ItemsControl的方式。迄今为止没有任何工作,我感觉UWP中的XAML存在问题,因为我在WPF中似乎没有遇到任何问题。是否存在已知问题,或者我只是以错误的方式解决这个问题?
我只想让子网格拉伸以水平填充。我应该提一下:
如果我将网格包装在ViewBox中,它会起作用,但这是不可取的,因为它有其他不利影响。
如果我点击XAML中层次结构中的所有内容,从ItemsControl开始,围绕此选择呈现的框全宽,一直到(不包括)DataTemplate。 DataTemplate和Grid显示一个紧凑的框,但如果我查看属性检查器,Grid的水平对齐方式为拉伸。这让我相信DataTemplate正在用没有HorizontalAlignment =“Stretch”的东西包裹网格,而且我没有已知的机制来改变它。
答案 0 :(得分:0)
此行为似乎只出现在Visual Studio和Expression Blend的设计器中。在Phone和Desktop上构建并执行后,所有内容都可以正确呈现。
我一般与设计师有过非常好的经历,并没有想到会出现这种情况。如果我只是忽略了设计师并取得了进步,我会更快意识到这一点。我通过VisualStudio反馈工具报告了这个问题。