如何使DockPanel中的项目扩展以适应WPF中的所有可用空间?

时间:2009-06-11 21:15:04

标签: c# wpf stackpanel dockpanel

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

修改 我已转换为使用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>

3 个答案:

答案 0 :(得分:11)

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

<强>更新

此外,根据我的经验,将窗体放入视图中,只有窗口中的视图才能获得更好的自动调整体验。

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

更新2:

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

答案 1 :(得分:7)

这应该这样做 - 我设置它以便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>

答案 2 :(得分:0)

将width和height属性设置为“auto”