WPF网格布局以及如何处理太窄的窗口

时间:2013-03-19 14:49:54

标签: wpf layout grid dockpanel

我想要一个带有两列的WPF面板,其中第二列是固定宽度,位于第一列的右侧。第一列是自动调整大小的。我希望第二列始终位于第一列之后,但是当窗口(或父元素)变得太窄并且只有第一列或第一列的一部分适合时,也不会丢失。

当我像这样使用DockPanel时:

<DockPanel DockPanel.Dock="Top">
  <Label Content="I am autosize" DockPanel.Dock="Left" />
  <Label Content="I come right after the first column" />
</DockPanel>

第一列是可见的,第二列是在它之后,当我开始调整窗口大小以使其更窄时,首先,第二列被裁剪直到它消失,第一列被裁剪。

当我使用它时:

<DockPanel DockPanel.Dock="Top">
  <Label Content="I come right after the first column" DockPanel.Dock="Right" />
  <Label Content="I am autosize" />
</DockPanel>

第二列开始被裁剪为第二列,但是当窗口足够宽时,它在填充停靠的第一列之后不对,它停靠在右边。第一列不是自动调整大小。

当我尝试使用Grid时,结果基本相同。当我将列宽设置为*,20,*时,它不起作用,*,20,Auto也不会使其表现完全符合我的要求。

甚至可以使用一些Panel(DockPanel,可预先设置)和布局属性组合来使我的第二列始终显示在第一列的右侧,但是当它们的两个宽度组合时,也会使第一列显示为第一列大于父元素宽度,所以在这种情况下,第二列似乎是右对接的,第一列是完全停靠的?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试使用网格控件。

<Window x:Class="WpfApplication6.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" 
    MinWidth="200">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition  MinWidth="200"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="I am autosize" 
                   Background="Red" />
    <TextBlock Text="I come right after the first column" 
                   Grid.Column="1" 
                   Background="AliceBlue" 
                   Width="200" 
                   HorizontalAlignment="Left" />
</Grid>

唯一的问题是您必须将父控件MinWidth也设置为修复大小,在本例中为窗口。 我希望这可以帮到你。