WPF对齐方式之Stretch

3

有人能帮我理解WPF的拉伸对齐方式吗?我经常遇到这样的问题:我想让一个控件填充一个区域,但我从来不明白应该在哪个级别上放置VerticalAlignment="Stretch"。特别是涉及到UserControls时。

我总是通过尝试不同的方法或在所有级别上都使用stretch来解决问题,但我希望了解如何正确地做到这一点。

让我们以我现在得到的示例为例:

  • 我有一个具有固定大小单元格的网格(可以使用GridSplitter调整大小)
  • 在此单元格中,我有一个包含TabControl的StackPanel的UserControl
  • 在TabControl中,我有包含ListView的另一个UserControl的TabItems

或者在某种伪XAML中

<ns:MyUserControl1 Grid.Row="0" Grid.Column="0">
    <!-- this is in MyUserControl1 -->
    <StackPanel>
        <TabControl>
            <TabItem>
               <ns:MyUserControl2>
                    <!-- This is in MyUserControl2 -->
                    <ListView/>
               </ns:MyUserControl2>
            </TabItem>
        </TabControl>
    </StackPanel>
</ns:MyUserControl>

现在我希望ListView填充整个网格单元(当然不包括TabControl和边距)。
1个回答

3
您的ListView将填充MyUserControl2 - 如果您希望它适合整个选项卡,则需要确保在UserControl的xaml文件中删除高度和宽度约束(这些将默认为每个300)
编辑:抱歉 - 我跳过了您的xaml的重要部分... MyUserControl1容器是StackPanel...这将堆叠子控件并调整大小以适合它们;如果您用DockPanel(或Grid)替换它,子控件将填充可用空间并给您想要的结果...
请查看此msdn文章this...希望这可以帮到您:)

你说得对。阅读了这篇文章后,我明白了我的问题通常与StackPanel有关。现在我明白了何时应该使用DockPanel。 - adrianm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接