Ken*_*rey 6 .net c# wpf user-interface xaml
这个问题很难简洁地描述,所以请耐心等待.
目前我有一个有两行的网格.第一行的高度为Auto,第二行的高度为*,因此当我调整窗口大小时,第二行会根据窗口增大和缩小.
这是基本布局:
<Window>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border>
...
</Border>
<Border Grid.Row="2">
...
</Border>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
这是现有行为的糟糕草图:
____ ____ ____
-> ->
____ ____ ____
____
____
____
Run Code Online (Sandbox Code Playgroud)
我想在第二行添加一种"最小高度",这样当我将窗口调整到足够小时,第二行就会停止收缩,而第一行开始缩小.
期望的行为:
____ ____ ____
-> -> ____
____ ____
____
____
____
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以获得第二行的最小高度,并强制第一行缩小?
更多细节:
当我在第二行设置MinHeight时,它只是在我将其调整到该尺寸以下时剪切网格.
第一行中控件的大小在编译时是未知的,但在运行时已知.如果它是解决方案的必要部分,我可以设置行的MaxHeight,但是现在自动高度正在工作.
第二行中的控件没有明确的大小.允许它们调整大小,但我试图防止它们变得小于所需的最小高度.
第一行中控件的大小在编译时是未知的,但在运行时已知.如果它是解决方案的必要部分,我可以设置行的MaxHeight,但是现在自动高度正在工作.
我认为这可能是最简单的解决方案.在运行时将MaxHeight绑定到计算值:
<Grid.RowDefinitions>
<RowDefinition Height="*" MaxHeight="{Binding MyProperty}"/>
<RowDefinition Height="*" MinHeight="100"/>
</Grid.RowDefinitions>
Run Code Online (Sandbox Code Playgroud)
编辑:以前的解决方案已关闭,但不正确.这是一种实现理想结果的方法,但不确定它是否是最佳方法:
<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>
Run Code Online (Sandbox Code Playgroud)
而你的转换器:
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4979 次 |
| 最近记录: |