2013-03-19 73 views
0

我想有一个WPF面板有两列,其中第二个是固定宽度,并在第一列的右侧。第一列是自动调整大小的。我希望第二列始终在第一列之后,而且当窗口(或父元素)变得太窄并且只有第一列或第一列的一部分适合时,也不会迷路。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> 

第二栏开始进行第二裁剪,但是当窗口足够宽,它不是后立即填充停靠第一个,它停靠在右侧。第一列不是自动调整大小的。

当我尝试使用网格时,结果基本相同。当我将列宽设置为*,20,*时,它不起作用,*,20,Auto也不会使其行为与我想要的完全一样。

甚至可以使用某些面板(DockPanel,优先)和布局属性组合,使我的第二列始终显示在第一个列的右侧,但也会在第一个列的宽度结合起来大于父元素宽度,所以在这种情况下,第二列似乎是正确停靠的,而第一列是完全停靠的?

谢谢!

回答

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设置为一个固定的大小,在这个例子的情况下,该窗口。 我希望这可以帮助你。

+0

不幸的是,这并没有完全解决我的问题。我希望我的第一个元素最初尽可能少地占用空间,但能够扩展。例如,像WrapPanel中的TextBox一样,它很小,但是当你输入它时,它会延伸。除非没有足够的空间,另一个控件应该紧挨着它,在这种情况下,第二个控件应该保持完全可见并且第一个控件应该部分裁剪。在你的例子中,第一个TextBlock扩展到Grid中的剩余宽度,它不会水平保持尽可能小。另外,第二个元素应该是固定的宽度。谢谢,认为:) – user2171565 2013-03-19 16:33:07

+0

所以基本上你不希望网格拉伸。设置网格的水平对齐,看看是否有效 – failedprogramming 2013-03-19 21:13:14