根据内部内容的可见性隐藏网格行

时间:2012-06-06 07:11:44

标签: wpf grid height

我有一些带有一些行的网格。行的高度相对于窗口大小设置如下:

<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>

现在我想基于绑定属性隐藏一行的内容。因此,我将内容对象的Visiblity属性设置为Collapsed。内容的Visiblity工作正常,但该行仍需要原始空间。

当内容的Visiblity折叠时,有没有办法隐藏行?注意:我不想将Height中的RowDefinition设置为Auto,因为我无法将Height相对设置为窗口大小和高度该行调整到行内部内容的高度。

1 个答案:

答案 0 :(得分:1)

您可以将行的Height属性绑定到binded属性。

然后你需要一个从typeof(binded属性)到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();
    }
}