且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何数据绑定ColumnDefinition的宽度或RowDefinition的高度?

更新时间:2023-10-14 21:34:22

我发现了一些问题:


  1. 虽然在XAML中可能看起来像一个double,但是一个* Definition的Height或Width的实际值是'GridLength'结构。

  2. GridLength的所有属性都是只读的,每次更改时,都必须创建一个新的属性。

  3. 与WPF中的每个其他属性不同,Width和Height不默认他们的数据绑定模式为'TwoWay',你必须手动设置这个。

因此,我使用了以下代码:

Thusly, I used the following code:

private GridLength myHorizontalInputRegionSize = new GridLength(0, GridUnitType.Auto)
public GridLength HorizontalInputRegionSize
{
    get
    {
        // If not yet set, get the starting value from the DataModel
        if (myHorizontalInputRegionSize.IsAuto)
            myHorizontalInputRegionSize = new GridLength(ConnectionTabDefaultUIOptions.HorizontalInputRegionSize, GridUnitType.Pixel);
        return myHorizontalInputRegionSize;
    }
    set
    {
        myHorizontalInputRegionSize = value;
        if (ConnectionTabDefaultUIOptions.HorizontalInputRegionSize != myHorizontalInputRegionSize.Value)
        {
            // Set the value in the DataModel
            ConnectionTabDefaultUIOptions.HorizontalInputRegionSize = value.Value;
        }
        OnPropertyChanged("HorizontalInputRegionSize");
    }
}

而XAML:

<Grid.RowDefinitions>
    <RowDefinition Height="*" MinHeight="100" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="{Binding Path=HorizontalInputRegionSize,Mode=TwoWay}" MinHeight="50" />
</Grid.RowDefinitions>