В идеале вы можете установить для свойства 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
и он увеличивается, столбец тоже будет расти.
Надеюсь, это поможет!