Высота сетки данных расширяет окно - PullRequest
0 голосов
/ 01 апреля 2019

Прямо сейчас у меня есть сетка данных в окне, которая заполняется после нажатия кнопки где-нибудь, всякий раз, когда сетка данных заполняется, она проталкивается за текущий размер окна и расширяет окно дальше. Как убедиться, что в данный момент сетка данных может расширяться только до текущего размера окна.

Мне требуется, чтобы размер окна впоследствии можно было изменять вручную, поэтому установка максимальной высоты невозможна.

    <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 голосов
/ 15 апреля 2019

Я не уверен, что это то, что вам нужно, но один из способов сделать MaxHeight динамическим с Height окна - это использовать 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;
    }

Как только вы определили его в ResourceDictionary

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

В противном случае, если вы также можете создать Converter , который вычел значение.Например, после связывания возвращается ActualHeight - parameter.

Я надеюсь, что это может помочь, и дайте мне знать, как это происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...