现在我在窗口中有一个数据网格,在某处单击按钮后会填满,每当数据网格被填满时,它都会超过窗口的当前大小并进一步扩展窗口。有什么方法可以确保数据网格目前只能扩展到窗口的当前大小。
我要求之后能够手动调整窗口大小,因此无法设置最大高度。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="40" MinHeight="40"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto" MinWidth="250"/>
</Grid.ColumnDefinitions>
<GroupBox Grid.Column="0 Margin="10,0,5,0">
<Grid MaxHeight="{Binding ActualHeight, ElementName= AddressTable}">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<DataGrid Name="AddrTable" VerticalScrollBarVisibility="Auto"
Grid.Row="0"
我不确定这是否是您想要的,但是使用窗口Height
使 MaxHeight 动态的一种方法是使用RelativeSource
.让我解释一下:
在Grid
中,将MaxHeight
设置为窗口的ActualHeight
。为此,您只需要绑定
MaxHeigth = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualHeight}"
现在,这不是一个很好的解决方案,因为窗口中有边距,填充和更多项目。所以你想要的是 使Grid
与ActualHeight
成正比 .因此,您需要一个转换器。
我给你做了这个,它返回一个百分比的值。
public class SizePercentageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return 0:
if (parameter == null)
return (double)value;
var split = parameter.ToString().Split('.');
var parameterDouble = double.Parse(split[0]) + double.Parse(split[1]) / Math.Pow(10, split[1].Length);
return (double)value * parameterDouble;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// Don't need to implement this
return null;
}
在资源字典中定义它后
<converters:SizePercentageConverter x:Key="PercentageConverter" />
您可以在MaxHeight
中调用它。例如,如果您希望它是ActualHeight
的70%,您只需要写
MaxHeight = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualHeight, Converter={StaticResource PercentageConverter}, ConverterParameter=0.7}"
否则,如果您还可以创建一个减去值的转换器。例如,一旦绑定,它将返回ActualHeight
-parameter
。
我希望这可能会有所帮助,并让我知道它是怎么回事。