Datagrid高度扩展窗口

时间:2019-04-01 04:02:20

标签: c# wpf mvvm datagrid

现在,我在一个窗口内有一个数据网格,单击某个位置的按钮后该数据网格将被填充,只要该数据网格被填充,它就会推过窗口的当前大小,并进一步扩展窗口。确保数据网格目前只能扩展到窗口当前大小的方法是什么。

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

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

1 个答案:

答案 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

我希望这会有所帮助,并让我知道如何进行。