UWP ItemsControl内容不像WPF那样延伸

时间:2016-03-13 06:36:19

标签: c# xaml win-universal-app windows-10-universal

我在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>

Grids in StackPanel working as expected

但是,一旦我尝试引入绑定和集合,这种行为就会停止发生。

<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>

ItemsControl trying to be funny

我发现可以追溯到2010年的类似问题,但迄今为止没有一个解决方案有效。我还发现了一般在UWP网格中报告的问题,在其他环境中使用。我尝试使用ListBox(在这方面表现相同),设置Horizo​​ntalContentAlignment,使用样式,因为Silverlight用户似乎已经找到了这样做的快乐,并改变了我表达ItemsControl的方式。迄今为止没有任何工作,我感觉UWP中的XAML存在问题,因为我在WPF中似乎没有遇到任何问题。是否存在已知问题,或者我只是以错误的方式解决这个问题?

我只想让子网格拉伸以水平填充。我应该提一下:

  1. 如果我将网格包装在ViewBox中,它会起作用,但这是不可取的,因为它有其他不利影响。

  2. 如果我点击XAML中层次结构中的所有内容,从ItemsControl开始,围绕此选择呈现的框全宽,一直到(不包括)DataTemplate。 DataTemplate和Grid显示一个紧凑的框,但如果我查看属性检查器,Grid的水平对齐方式为拉伸。这让我相信DataTemplate正在用没有Horizo​​ntalAlignment =“Stretch”的东西包裹网格,而且我没有已知的机制来改变它。

1 个答案:

答案 0 :(得分:0)

此行为似乎只出现在Visual Studio和Expression Blend的设计器中。在Phone和Desktop上构建并执行后,所有内容都可以正确呈现。

我一般与设计师有过非常好的经历,并没有想到会出现这种情况。如果我只是忽略了设计师并取得了进步,我会更快意识到这一点。我通过VisualStudio反馈工具报告了这个问题。