グリッドは2列あります。一番左の列の幅をGridの使用可能な幅の50%にするか、列に含まれるコントロールに合わせるのに必要な幅のどちらか大きい方を使用します。どうすればこれを達成できますか?条件付きグリッド列の幅を設定します。
言い方を変えて、列の幅を可能な限り小さくしたいが、最小値は50%にしたい。
グリッドは2列あります。一番左の列の幅をGridの使用可能な幅の50%にするか、列に含まれるコントロールに合わせるのに必要な幅のどちらか大きい方を使用します。どうすればこれを達成できますか?条件付きグリッド列の幅を設定します。
言い方を変えて、列の幅を可能な限り小さくしたいが、最小値は50%にしたい。
理想的には0.5へColumnDefintion
*上MinWidth
プロパティを設定することができます。ただし、このプロパティは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
にテキストを入力すると、そのテキストも大きくなり、その列も大きくなります。
希望すると便利です。
親の幅が先験的に分かっている場合、これはかなり簡単です。親の幅が、その後100だった場合:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="50" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
</Grid>