Как привязать ListView MaxHeight к текущей высоте окна? - PullRequest
6 голосов
/ 18 марта 2010

Как привязать ListView MaxHeight к текущей высоте окна?

Я бы хотел ограничить высоту, скажем, 3/4 высоты окон.

Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 18 марта 2010

Другой подход (без конвертера) состоит в том, чтобы просто поместить его в сетку размером со звезду. Конечно, это накладывает некоторые ограничения на ваш макет. Таким образом, это зависит от другого контента, может ли этот подход использоваться или нет.

<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, в зависимости от ваших требований.

1 голос
/ 18 марта 2010

Вы можете использовать конвертер для вычисления высоты на основе высоты окна, что-то вроде этого ...

Вам нужно передать Window.ActualHeight в конвертер - он вернет высоту окна, умноженную на 0,75. Если по какой-либо причине при обращении к конвертеру Window.ActualHeight будет иметь значение null (или вы случайно передали что-то, что не может быть приведено к двойному значению), он вернет 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>    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...