gpt4 book ai didi

c# - WPF 网格大小调整

转载 作者:太空狗 更新时间:2023-10-29 21:29:04 25 4
gpt4 key购买 nike

这个问题很难简洁地描述,所以请耐心等待。

目前我有一个包含两行的网格。第一行的高度是 Auto,第二行的高度是 *,所以当我调整窗口大小时,第二行会根据窗口增长和缩小。

这是基本布局:

<Window>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border>
...
</Border>
<Border Grid.Row="2">
...
</Border>
</Grid>
</Window>

这是对现有行为的粗略描述:

____    ____    ____
-> ->
____ ____ ____
____
____
____

我想在第二行添加一种“最小高度”,这样当我将窗口调整得足够小时,第二行停止缩小,而第一行开始缩小。

期望的行为:

____    ____    ____
-> -> ____
____ ____
____
____
____

有没有一种简单的方法来获取第二行的最小高度,并强制第一行缩小?

更多详情:

当我在第二行设置 MinHeight 时,当我将其调整到该尺寸以下时,它只会剪裁网格。

第一行控件的大小在编译时未知,但在运行时已知。如果它是解决方案的必要部分,我可以设置行的 MaxHeight,但现在自动高度正在工作。

第二行的控件没有明确的大小。它们可以调整大小,但我试图防止它们变得小于所需的最小高度。

最佳答案

The size of the controls in the first row are unknown at compile time, but known at runtime. If it is a necessary part of the solution, I could set the row's MaxHeight, but right now an Auto height is working.

我认为这可能是最简单的解决方案。在运行时将 MaxHeight 绑定(bind)到计算值:

<Grid.RowDefinitions>
<RowDefinition Height="*" MaxHeight="{Binding MyProperty}"/>
<RowDefinition Height="*" MinHeight="100"/>
</Grid.RowDefinitions>

编辑:之前的解决方案很接近,但不正确。这是一种实现您想要的结果的方法,但是不确定它是否是最佳方法:

<Grid ShowGridLines="True" Name="myGrid">
<Grid.Resources>
<local:RowHeightConverter x:Key="rowHeightConverter" />
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Name="row1" MaxHeight="{Binding MyProperty}">
<RowDefinition.Height>
<MultiBinding Converter="{StaticResource rowHeightConverter}">
<Binding Path="ActualHeight" ElementName="row2" />
<Binding Path="ActualHeight" ElementName="myGrid" />
<Binding Path="MaxHeight" ElementName="row1" />
</MultiBinding>
</RowDefinition.Height>
</RowDefinition>
<RowDefinition Name="row2" Height="*" MinHeight="300"/>
</Grid.RowDefinitions>
</Grid>

还有你的转换器:

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double row2Height = (double)values[0];
double gridHeight = (double)values[1];
double row1MaxHeight = (double)values[2];

if (gridHeight - row2Height >= row1MaxHeight)
{
return gridHeight - row2Height;
}

return row1MaxHeight;
}

关于c# - WPF 网格大小调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11144652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com