WPF GridSplitter для разделения / изменения размера двух ListBox? - PullRequest
3 голосов
/ 15 сентября 2009

У меня есть сетка с 7 строками. Ряд 0 представляет собой группу из 2 кнопок Строка 1 - список объектов Ряд 2 представляет собой группу из 3 кнопок Ряд 3 представляет собой группу из 2 кнопок Ряд 4 - то, где живет мой GridSplitter Ряд 5 представляет собой группу из 2 кнопок Строка 6 - это список объектов

Я хочу, чтобы GridSplitter двигался вверх и вниз, изменяя размеры каждого из двух списков. Теперь я живу в своем собственном ряду, и когда я перемещаю его, он останавливается, когда достигает верхней части строки 4 (своей собственной строки), и просто создает пустое пространство, когда расширяет строку 4 вниз.

Мне просто нужен этот сплиттер, чтобы скользить вверх и вниз и изменять размер каждого ListBox. В настоящее время эти списки имеют вертикальные полосы прокрутки, если они становятся слишком большими для их просмотра.

есть идеи?

Ответы [ 2 ]

6 голосов
/ 15 сентября 2009

Вот некоторый XAML, который показывает, как использовать GridSplitter, как вы описали:

<Grid VerticalAlignment="Stretch">  
  <Grid.RowDefinitions>
    <RowDefinition Height="10" />
    <RowDefinition Height="10" />
    <RowDefinition Height="10" />
    <RowDefinition Height="10" />
    <RowDefinition Height="10" />
    <RowDefinition Height="10" />
    <RowDefinition Height="*" />
    <RowDefinition Height="*" />
  </Grid.RowDefinitions>

  <Rectangle Grid.Row="0" Fill="Red" />
  <Rectangle Grid.Row="1" Fill="Orange" />
  <Rectangle Grid.Row="2" Fill="Yellow" />
  <Rectangle Grid.Row="3" Fill="Green" />
  <Rectangle Grid.Row="4" Fill="Blue" />
  <Rectangle Grid.Row="5" Fill="LightBlue" />

  <ListBox Grid.Row="6" Background="Indigo">
    <ListBoxItem>Hello</ListBoxItem>
    <ListBoxItem>World</ListBoxItem>
  </ListBox>

  <GridSplitter Grid.Row="7" Height="5" Background="Gray"
                VerticalAlignment="Top" HorizontalAlignment="Stretch" />

  <ListBox Grid.Row="7" Background="Violet" Margin="0,5,0,0">
    <ListBoxItem>Hello</ListBoxItem>
    <ListBoxItem>World</ListBoxItem>
  </ListBox>
</Grid>

Избегайте размещения GridSplitter в своем собственном ряду. Поместите его в существующий ряд и установите его выравнивание по верху (или по низу, если в верхней ячейке), растянутому по горизонтали. Обратите внимание, как я установил его высоту на 5, а затем присвоил верхнее поле 5 второму ListBox, чтобы ни один элемент не скрывал какую-либо часть другого.

Надеюсь, это поможет.

0 голосов
/ 13 декабря 2011

У меня была такая же проблема: горизонтальный GridSplitter (в своем собственном ряду) не мог двигаться, хотя мой вертикальный работал просто отлично. Я обнаружил, что добавление свойства HorizontalAlignment = "Stretch" исправило мои трудности.

нерабочий XAML:

<GridSplitter Grid.Row="2" Grid.Column="2" Height="5" ResizeDirection="Rows" VerticalAlignment="Center" />

Рабочий XAML:

    <GridSplitter Grid.Row="2" Grid.Column="2" Height="5" ResizeDirection="Rows" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>

Я также обнаружил, что если я запустил проект, закрыл приложение проекта и затем поместил курсор на строку XAML с нерабочим GridSplitter (т.е. до изменения), окно выбора для GridSplitter будет показывать GridSplitter в конец столбца. Вы также можете продемонстрировать это, изменив свойство BackGround на цвет (например, «Красный»).

Установка свойства HorizontalAlignment упоминается здесь (но не подчеркивается): http://msdn.microsoft.com/en-us/library/ms743457.aspx

...