13

我有一个StackPanel包含一个StackPanel和一些其他项目。第一个StackPanel具有垂直方向,内部具有水平方向。内部有 aTreeView和 a ListView,我希望它们扩展并适合窗口的宽度,我通过窗口设置并允许用户更改。我还希望外部StackPanel适合窗户的高度。我该怎么做呢?

编辑: 我已经转换为使用 a DockPanel,并且我已经DockPanel.Dock在每个元素中正确设置了属性,并且LastChildFill在两个停靠面板中都禁用了,布局仍然没有拉伸。

编码:

<Window x:Class="Clippy.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged">
    <DockPanel Name="wrapperDockPanel" LastChildFill="False">
        <Menu Height="22" Name="mainMenu" Width="Auto" DockPanel.Dock="Top" />
        <ToolBar Height="26" Name="mainToolBar" Width="Auto" DockPanel.Dock="Top" />
        <DockPanel Height="Auto" Name="contentDockPanel" DockPanel.Dock="Top" LastChildFill="False">
            <TreeView Name="categoryTreeView" />
            <ListView Name="clipListView" />
        </DockPanel>
        <StatusBar Height="23" Name="mainStatusBar" DockPanel.Dock="Top" />
    </DockPanel>
</Window>
4

3 回答 3

11

请改用 DockPanel。StackPanel 明确不关心可见空间,而 DockPanel 根据可用空间进行所有大小计算。

更新:

此外,根据我的经验,将窗口的主体放入视图中,并且仅将视图放在窗口中可以获得更好的 Auto Size 体验。

出于某种原因,将所有孩子直接放入 Window 似乎不能很好地自动调整大小。

更新 2:

我会从要拉伸(填充)未使用空间的元素中删除显式 DockPanel.Dock 属性。

于 2009-06-11T21:21:00.227 回答
9

应该这样做 - 我设置它以便 TreeView 和 ListView 共享主视图 50/50;如果您不想要,请将其设置为“自动”和“*”或其他内容。使用“LastChildFill”对您有利!

<Window x:Class="Clippy.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged">

    <DockPanel LastChildFill="True">
        <Menu Width="Auto" DockPanel.Dock="Top" />
        <ToolBar Width="Auto" DockPanel.Dock="Top" />
        <StatusBar DockPanel.Dock="Bottom" />

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="0.5*" />
                <RowDefinition Height="0.5*" />
            </Grid.RowDefinitions>

            <TreeView Name="categoryTreeView" Grid.Row="0" />
            <ListView Name="clipListView" Grid.Row="1" />
        </Grid>
    </DockPanel>

</Window>
于 2009-06-12T21:40:07.397 回答
0

将宽度和高度属性设置为“自动”

于 2009-06-11T21:16:09.083 回答