2011-12-14 11 views
1

グリッドは2列あります。一番左の列の幅をGridの使用可能な幅の50%にするか、列に含まれるコントロールに合わせるのに必要な幅のどちらか大きい方を使用します。どうすればこれを達成できますか?条件付きグリッド列の幅を設定します。

言い方を変えて、列の幅を可能な限り小さくしたいが、最小値は50%にしたい。

答えて

2

理想的には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にテキストを入力すると、そのテキストも大きくなり、その列も大きくなります。

希望すると便利です。

-1

親の幅が先験的に分かっている場合、これはかなり簡単です。親の幅が、その後100だった場合:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" MinWidth="50" /> 
    <ColumnDefinition Width="1*" /> 
    </Grid.ColumnDefinitions> 
</Grid> 
関連する問題