数据网格高度展开窗口



现在我在窗口中有一个数据网格,在某处单击按钮后会填满,每当数据网格被填满时,它都会超过窗口的当前大小并进一步扩展窗口。有什么方法可以确保数据网格目前只能扩展到窗口的当前大小。

我要求之后能够手动调整窗口大小,因此无法设置最大高度。

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

现在,这不是一个很好的解决方案,因为窗口中有边距,填充和更多项目。所以你想要的是 使GridActualHeight成正比 .因此,您需要一个转换器

我给你做了这个,它返回一个百分比的值。

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中调用它。例如,如果您希望它是ActualHeight70%,您只需要写

MaxHeight = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualHeight, Converter={StaticResource PercentageConverter}, ConverterParameter=0.7}"

否则,如果您还可以创建一个减去值的转换器。例如,一旦绑定,它将返回ActualHeight-parameter

我希望这可能会有所帮助,并让我知道它是怎么回事。

最新更新