Как связать Listview MaxHeight с текущей высотой окон?
Я хотел бы ограничить высоту скажем, 3/4 высоты окон.
Как я могу сделать это?
Другой подход (без конвертера) - просто поместить его в сетку размером со звезду. Конечно, это накладывает некоторые ограничения на ваш макет. Таким образом, это зависит от другого контента, можно ли использовать этот подход или нет.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.75*"/>
<RowDefinition Height="0.25*"/>
</Grid.RowDefinitions>
<ListView Grid.Row="0" VerticalAlignment="Top"/>
<!-- some other content -->
</Grid>
Поскольку вы хотели указать MaxHeight ListView, я установил для VerticalAlignment
значение Top
, чтобы не использовать все доступное пространство. если это не нужно. Конечно, вы также можете установить это значение на Bottom
или Stretch
, в зависимости от ваших требований.
Вы можете использовать конвертер для вычисления высоты на основе высоты окна, что-то вроде этого ...
Вам нужно передать 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>