如何将Listview MaxHeight绑定到当前窗口高度?

时间:2010-03-18 08:40:48

标签: wpf data-binding

如何将Listview MaxHeight绑定到当前窗口高度?

我想限制高度让我们说3/4的窗户高度。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

另一种方法(没有转换器)就是将它放在星号网格中。当然,这会对您的布局施加一些限制。因此,是否可以使用此方法取决于其他内容。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="0.75*"/>
        <RowDefinition Height="0.25*"/>
    </Grid.RowDefinitions>

    <ListView Grid.Row="0" VerticalAlignment="Top"/>
    <!-- some other content -->

</Grid>

由于您想要指定ListView的 MaxHeight ,我已将VerticalAlignment设置为Top,因此它不会使用所有可用空间(如果它是不需要。当然,您也可以将其设置为BottomStretch,具体取决于您的要求。

答案 1 :(得分:1)

您可以使用转换器根据窗口高度计算高度,如下所示......

您需要将Window.ActualHeight传递给转换器 - 然后它将返回窗口高度乘以0.75。如果由于某种原因,当转换器被击中时,Window.ActualHeight为空(或者你不小心传递了一些无法转换为double的东西)它将返回double.NaN,这将设置高度为汽车。

public class ControlHeightConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
                           System.Globalization.CultureInfo culture)
    {
        double height = value as double;

        if(value != null)
        {
            return value * 0.75;
        }
        else
        {
            return double.NaN;
        }
    }
}

将此绑定到您的控件中......(显然这是xaml的一个非常简洁的版本!)

<Window x:Name="MyWindow"
  xmlns:converters="clr-namespace:NamespaceWhereConvertersAreHeld">
  <Window.Resources>
    <ResourceDictionary>
      <converters:ControlHeightConverter x:Key="ControlHeightConverter"/>
    </ResourceDictionary>
  </Window.Resources>

  <ListView MaxHeight="{Binding 
        ElementName=MyWindow, Path=ActualHeight, 
        Converter={StaticResource ControlHeightConverter}}"/>
</Window>