WPF GridSplitter заменяет привязку строки.свойство height

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


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

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

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

1 ответов


Я думаю, проблема в том, что ваше исходное свойство 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