现在,我在一个窗口内有一个数据网格,单击某个位置的按钮后该数据网格将被填充,只要该数据网格被填充,它就会推过窗口的当前大小,并进一步扩展窗口。确保数据网格目前只能扩展到窗口当前大小的方法是什么。
我要求此后可以手动调整窗口大小,因此无法设置最大高度。
<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"
答案 0 :(得分:0)
我不确定这是否是您想要的,但是使用窗口getter
使MaxHeight动态化的一种方法是使用Height
。让我解释一下:
在RelativeSource
中,将Grid
设置为窗口的MaxHeight
。为此,您只需要绑定
ActualHeight
现在,由于窗口内有边距,填充和更多项目,因此这不是一个很好的解决方案。因此,您要使MaxHeigth = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualHeight}"
与Grid
成比例。因此,您需要一个转换器。
我为您准备了这个,它返回值的百分比。
ActualHeight
在 ResourceDictionary
中定义了它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
的 70%,则只需编写
ActualHeight
否则,如果您还可以创建一个减去了值的转换器。例如,绑定后返回MaxHeight = "{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualHeight, Converter={StaticResource PercentageConverter}, ConverterParameter=0.7}"
-ActualHeight
。
我希望这会有所帮助,并让我知道如何进行。