Условно заданная ширина столбца сетки - PullRequest
1 голос
/ 14 декабря 2011

У меня есть Сетка с двумя столбцами.Я хочу, чтобы ширина крайней левой колонки составляла либо 50% доступной ширины таблицы, либо ширину, необходимую для размещения любых элементов управления, содержащихся в столбце, в зависимости от того, что больше.Как мне этого добиться?

Другими словами, я хочу, чтобы столбец занимал как можно меньшую ширину, но с минимальным значением 50%.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

В идеале вы можете установить для свойства MinWidth для ColumnDefintion значение 0,5 *.Однако это свойство ожидает Double, а не GridLength.Чтобы обойти это, вы можете использовать метод грубой силы, используя конвертер:

XAML :

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" MinWidth="{Binding ElementName=otherColumn, Path=ActualWidth, Converter={l:DivideByTwoConverter}}" />
        <ColumnDefinition x:Name="otherColumn" />
    </Grid.ColumnDefinitions>
    <TextBox Grid.Column="0" />
    <TextBox Grid.Column="1" />
</Grid>

Конвертер :

public class DivideByTwoConverter : MarkupExtension, IValueConverter
{
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is double)
        {
            return (double) value/2;
        }

        return DependencyProperty.UnsetValue;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

В этом примере столбец начинается с половины ширины.Когда вы вводите текст в TextBox и он увеличивается, столбец тоже будет расти.

Надеюсь, это поможет!

0 голосов
/ 14 декабря 2011

Если ширина родительского элемента известна априори, то это довольно просто.Если ширина родителя была 100, тогда:

<Grid>
   <Grid.ColumnDefinitions>
     <ColumnDefinition Width="Auto" MinWidth="50" />
     <ColumnDefinition Width="1*" />
   </Grid.ColumnDefinitions>
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...