2010-09-12 2 views
4

Я поставил ListView в средней строке представления. Представление содержится в окне, которое имеет параметр SizeToContent для WidthAndHeight. ListView первоначально пуст, но базовый ViewModel заполняет это представление списка в этом процессе.Как предотвратить изменение размера окна ListView?

Средняя высота решетки. Высота установлена ​​на *, чтобы заполнить доступный размер окна. Когда ListView получает новые элементы, в какой-то момент он будет расширять размер окна вместо отображения ScrollViewer в ListView. Как я могу предотвратить такое поведение, чтобы параметр SizeToContent был установлен в WidthAndHeight, высота Grid.Row до *, но не имеет ли ListView расширение размеров окна?

Вот код для окна (свойство рабочей области будет содержать ViewModel):

<Window x:Class="Views.ContainerWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="{Binding Title}" 
     SizeToContent="WidthAndHeight"> 
    <ContentControl Content="{Binding Workspace}"/> 
</Window> 

Взгляд за предоставленный ViewModel выглядит следующим образом:

<UserControl x:Class="Views.SomeView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      MinHeight="450"> 
    <Grid> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <TextBlock Grid.Row="0" 
       TextWrapping="Wrap" 
       Margin="5" 
       Text="Some description text"/> 
     <ListView Grid.Row="1" 
       ItemsSource="{Binding ItemsList}" 
       Margin="5"> 
     <ListView.View> 
      <GridView> 
       ... 
      </GridView> 
     </ListView.View> 
     </ListView> 
     <Button Grid.Row="2" 
       HorizontalAlignment="Right" 
       Command" Value="{Binding CloseCommand}"/> 
    </Grid> 
</UserControl> 

ответ

4

Отключил автозапуск окна после того, как он загрузил работу для вас?

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     this.SizeToContent = SizeToContent.Manual; 
    } 
+0

Спасибо. На самом деле это решение, которое я использовал. Вы можете видеть это, если вы развернете комментарии выше. :) –

+0

@Ninfendo: +1 Это злобно, спасибо. Я потратил день, пытаясь понять это. – TarkaDaal

1

Вы должны ограничить один элементов динамического размера в иерархии. То есть установите maximumheight/maximumwith или height/with свойствами windown, grid или listboxt на соответствующее значение.

+0

Я бы предпочел не делать этого. Я ищу способ не допустить, чтобы ListView расширялся, если элементы были добавлены. –

+0

Я пытался связать высоту ListView или максимальную высоту с текущей высотой средней Grid.Row, но это не помогло. –

+1

Ну, вам нужно что-то ограничить. Если список может увеличиться, вы не увидите панель прокрутки. Но неустранимый рост lisbox ведет к неограниченному росту окна. Типичный захват 22. Итак, IMHO, используя максимальный размер для окна или lisbox, доставит вас туда, где вы хотите, - сделайте окно как можно меньше, но если оно становится слишком большим, в списке отображается полоса прокрутки. – AxelEckenberger