如何将Listview MaxHeight绑定到当前窗口高度?
我想限制高度让我们说3/4的窗户高度。
我该怎么做?
答案 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
,因此它不会使用所有可用空间(如果它是不需要。当然,您也可以将其设置为Bottom
或Stretch
,具体取决于您的要求。
答案 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>