WPF XAML and MinWidth and MaxWidth

本文关键字:and MaxWidth MinWidth WPF XAML | 更新日期: 2023-09-27 17:52:33

我有一个StackPanel,我在其中包装了7个矩形所有不同的宽度。

我在堆栈中的第一个矩形,我有一个最小和最大宽度的定义和其他一个矩形(见下面的x:Name="ToBeCollapsed"),默认是折叠的,但在c#的特定条件下是可见的。
我的问题是,如果矩形"ToBeCollasped"被折叠,第一个矩形不会拉伸到最大宽度。我的想法是,如果折叠的矩形被折叠,第一个矩形将填充空格到"755"的最大值。

我的逻辑错了吗?

我的布局如下:

<StackPanel x:Name="RectangleColumns" Width="1840" Orientation="Horizontal">
     <Rectangle MinWidth="575" MaxWidth="755" /> 
     <Rectangle Width="315"/>
     <Rectangle Width="180" />
     <Rectangle Width="180"/>
     <!--If collapsed first rectangle should grow to 755.  MinWidth + 180-->
     <Rectangle x:Name="ToBeCollapsed" Width="180"/>
     <Rectangle Width="220"/>
     <Rectangle Width="190"/>
</StackPanel>

WPF XAML and MinWidth and MaxWidth

适当设置列定义的网格就可以达到这个目的。我自己也试过用一些填充颜色和较小的宽度来证明这一点,当第五列崩溃时,第一列会增长到空间:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid Grid.Row="0" x:Name="RectangleColumns" HorizontalAlignment="Stretch  ">
        <Grid.ColumnDefinitions>
            <ColumnDefinition MinWidth="200" MaxWidth="400"/>
            <ColumnDefinition MaxWidth="50"/>
            <ColumnDefinition MaxWidth="50"/>
            <ColumnDefinition MaxWidth="50"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition MaxWidth="50"/>
            <ColumnDefinition MaxWidth="50"/>
        </Grid.ColumnDefinitions>
        <Rectangle Grid.Column="0" Fill="Aqua" MinWidth="200" MaxWidth="400" />
        <Rectangle Grid.Column="1" Fill="Blue" Width="50"/>
        <Rectangle Grid.Column="2" Fill="Aqua" Width="50" />
        <Rectangle Grid.Column="3" Fill="Blue" Width="50"/>            
        <Rectangle Grid.Column="4" Fill="Pink" Width="300" Name="toBeCollapsed"/>
        <Rectangle Grid.Column="5" Fill="Aqua" Width="50"/>
        <Rectangle Grid.Column="6" Fill="Blue" Width="50"/>
    </Grid>
    <Button Grid.Row="1" Content="Toggle Visibility" Name="ButtonToggle" />
</Grid>

代码隐藏,只是为了演示:

    public MainWindow()
    {
        InitializeComponent();
        ButtonToggle.Click += ButtonToggleOnClick;
    }
    private void ButtonToggleOnClick(object sender, RoutedEventArgs routedEventArgs)
    {
        toBeCollapsed.Visibility = toBeCollapsed.Visibility == Visibility.Collapsed
            ? Visibility.Visible
            : Visibility.Collapsed;
    }

始终查看方案背后:

在WPF中,每个LayoutControl都是Grid -或可与网格重现-但它使用不同的列或行定义和Alignment

Stackpanel是一个网格,包含以下设置(水平):

  • 每个Auto大小的添加控件的Columndefinition
  • 所有添加的子控件水平对齐为居中
  • 带* Width的附加Columndefinition

饼干就是这样乱糟糟的。

自动调整大小根据列或行内内容的大小分配空间。

通常是尽可能小的尺寸:/

所以+1 @Bradley Uffner

如果Rectangle的最小/最大Columndefinition*,则使用Grid