0

我想要一个有两列的 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,最好是)和布局属性组合来使我的第二列总是立即出现在第一列的右侧,但是当它们的两个宽度组合大于时,也可以使第一列首先裁剪父元素宽度,所以在这种情况下,第二列似乎是右停靠而第一列是完全停靠的?

谢谢!

4

1 回答 1

0

您可以尝试使用 Grid 控件。

<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 设置为固定大小,在本例中为窗口。我希望这可以帮助你。

于 2013-03-19T16:11:29.323 回答