Как я связываю с данными Ширину ColumnDefinition или Высоту RowDefinition?

Как это работает:

<Button title="make it vegan!"
                    style = {styles.vegan}
                    onPress = {()=> {
                      this.setState({isMeat : false})
                      this.setState({isVegetarian : false})
                      this.setState({isVegan : true})
                    }}
            >
              make it vegan!
            </Button>
33
задан Nidonocu 29 September 2008 в 08:18
поделиться

2 ответа

Было много глюков, которые я обнаружил:

  1. , Хотя это может появиться как двойное в XAML, фактическом значении для *, Высота или Ширина Определения являются структурой 'GridLength'.
  2. Все свойства GridLength только для чтения, необходимо создать новый каждый раз, когда Вы изменяете его.
  3. В отличие от любого свойства в WPF, Ширина и Высота не принимают значение по умолчанию их режим привязки данных к 'Двухстороннему', необходимо вручную установить это.

Таким образом, я использовал следующий код:

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>
20
ответ дан 27 November 2019 в 18:06
поделиться

Другая возможность, так как Вы подняли преобразование между GridLength и int, состоит в том, чтобы создать IValueConverter и использовать его при привязке с Width. IValueConverter с также обрабатывают двухстороннюю привязку, потому что они имеют и ConvertTo() и ConvertBack() методы.

4
ответ дан 27 November 2019 в 18:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: