Wpf GridSplitter заменяет привязку для свойства row.height - PullRequest
8 голосов
/ 10 марта 2011

Мне тяжело с разветвителем сетки.Я связал свойство зависимости RowDefinition.Height со свойством clr модели, как показано ниже.


    <Grid.RowDefinitions>
        <RowDefinition Height='{Binding Path=Height, Mode=OneWay}' />
        <RowDefinition Height='*' />
    </Grid.RowDefinitions>

Это работает нормально только до использования GridSplitter.Когда высота строки изменяется вручную с помощью GridSplitter, она заменяет привязку новым фиксированным размером (и удаляет привязку).

У вас есть идеи или обходные пути, как создать две строки, которые быизменить размер с помощью GridSplitter, но при этом изменить их высоту в соответствии со свойством / привязкой clr?

1 Ответ

14 голосов
/ 10 марта 2011

Мне кажется, проблема в том, что ваше исходное свойство Height имеет тип double, а RowDefinition.Height имеет тип GridLength.Используйте конвертер, и он будет работать TwoWay

<Grid.RowDefinitions>
    <RowDefinition Height="{Binding Path=Height,
                                    Mode=TwoWay,
                                    Converter={StaticResource DoubleGridLengthConverter}}"/>
    <!--...-->
</Grid.RowDefinitions>

DoubleGridLengthConverter

public class DoubleGridLengthConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return new GridLength((double)value);
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        GridLength gridLength = (GridLength)value;
        return gridLength.Value;
    }
}

Обновление
Загрузил мой образецприложение здесь: http://www.mediafire.com/download.php?pgibb205d65596q

Установите RowDefinition.Height, введя значение в нижнем TextBox и измените размер RowDefinition.Height с помощью GridSplitter

...