WPF XAML和MinWidth和MaxWidth

时间:2015-06-01 18:43:26

标签: c# wpf xaml

我有StackPanel,其中包含7个不同宽度的矩形。

我在堆栈中的第一个矩形,我定义了最小和最大宽度以及其他一个矩形(见下面的x:Name =“ToBeCollapsed”),默认情况下是折叠的,但是在某个条件下可以看到C#。
我的问题是,如果矩形“ToBeCollasped”折叠,第一个Rectangle不会拉伸到MAX宽度。我的想法是,如果折叠的矩形被折叠,第一个矩形将填充空间到“755”的MAX。

我的逻辑错了吗?

我的布局如下:

<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>

2 个答案:

答案 0 :(得分:4)

正确设置列定义的网格可以解决问题。我自己尝试使用一些填充颜色和较小的宽度来证明这一点,当第五列折叠时,第一列会长入空间:

<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;
    }

答案 1 :(得分:1)

始终关注Schene:

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

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

  • 每个添加Auto尺寸
  • 的控件的Columndefinition
  • 所有添加的Child控件Horizo​​ntalAligment为Center
  • 带*宽度的附加列定义

这就是饼干挤满的方式。

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

通常是最小的尺寸:/

@Bradley Uffner的+1代表

使用Grid Columndefinition最小/最大Rectangle*