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