如何将Listview的最大高度绑定到当前窗口的高度?

6

如何将Listview的最大高度绑定到当前窗口的高度?

我想将高度限制在窗口高度的3/4左右。

我该怎么做?

2个回答

4

另一种方法(无需转换器)是将其放置在星型大小的网格中。当然,这会对布局产生一定限制。因此,它取决于其他内容是否可以使用此方法。

<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 ,这样如果不需要,它就不会使用所有可用的空间。当然,根据您的要求,您也可以将其设置为 Bottom Stretch


1

你可以使用转换器根据窗口高度计算高度,类似于这样...

你需要将Window.ActualHeight传递给转换器-然后它将返回窗口高度乘以0.75。如果由于某种原因,在转换器被触发时,Window.ActualHeight为null(或者您意外地传递了无法转换为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>    

我尝试了这种方法,它运行良好,但是当我调整窗口大小时,转换器没有被触发,因此MaxHeight不会相应地改变。有什么想法如何解决这个问题吗? - Maestro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接