0

いくつかの行を持つグリッドがあります。行の高さは、次のようにウィンドウ サイズに対して相対的に設定されます。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="0.3*" />
        <RowDefinition Height="0.2*" />
        <RowDefinition Height="0.2*" />
        <RowDefinition Height="0.1*" /> <!-- hide this row -->
        <RowDefinition Height="0.2*" />
    </Grid.RowDefinitions>
</Grid>

バインドされたプロパティに基づいて、1 つの行のコンテンツを非表示にしたいと考えています。したがってVisiblity、コンテンツ オブジェクトのプロパティをに設定しますCollapsed。コンテンツはVisiblity正常に機能しますが、行にはまだ元のスペースが必要です。

コンテンツの可視性が折りたたまれているときに行を非表示にする方法はありますか? 注:ウィンドウサイズに相対的に設定できず、行の高さが行内のコンテンツの高さに調整されるためHeight、に設定したくありません。RowDefinitionAutoHeight

4

1 に答える 1

1

行の Height プロパティをバインドされたプロパティにバインドできます。

次に、typeof (バインドされたプロパティ) から System.Windows.GridLength へのコンバーター (IValueConverter の実装) が必要です。

おそらく次のようなもの

[ValueConversion(typeof(System.Windows.Visibility), typeof(System.Windows.GridLength))]
public class VisibToHeightConv : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool b = (boolean)value;

        if (b == true)
            return new System.Windows.GridLength(0, System.Windows.GridUnitType.Star);
        else
            return new System.Windows.GridLength(80, System.Windows.GridUnitType.Star);
    }

    public object ConvertBack(object value, Type targetType, object parameter,   System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2012-06-06T07:34:09.313 に答える