DataGrid не прогибается, чтобы вписаться в содержащую сетку - PullRequest
1 голос
/ 02 февраля 2011

У меня есть следующая структура в моем приложении WPF.(С использованием Prism и Regions)

Window ----> UserControl ----> DockPanel ------> Grid (2X2) ------> Row0Col0-- Grid (2X1)------> ItemsControl ------> UserControl (вводится в ItemsControl с помощью Prism) -----> DockPanel -----> DataGrid. (60 строк, 10 столбцов)

Я ожидаю, что поведение DataGrid будет иметь размер, соответствующий размеру ячейки сетки, и отображать обе полосы прокрутки, потому что он слишком большой для размещения.Но это не так.Это остается его максимальный размер и вырезает из краев ячейки сетки.Все ячейки обеих сеток не имеют спецификаций размера (Авторазмер).Когда я явно указываю высоту и ширину сетки данных, я вижу полосы прокрутки, но, конечно, я не хочу этого делать.

Пожалуйста, помогите !.Спасибо

Я сохранил скриншоты по следующей ссылке.http://s1199.photobucket.com/albums/aa467/vikasgoyalgzs/

1 Ответ

3 голосов
/ 02 февраля 2011

Вы говорите: «Все ячейки обеих сеток не имеют спецификаций размера (Авторазмер)» - вот в чем проблема. Когда ячейка grid имеет размер auto, grid дает содержимому в этой ячейке столько места, сколько ему нужно (не имеет значения, помещается ли оно в окне или нет). Чтобы исправить это, вы должны положить свой DataGrid в клетку размером со звезду.

<Grid>
   <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="*"/>      
   </Grid.RowDefinitions>

   <Border Grid.Row="0">
     <!-- Content that will take as much space as it wants -->
   </Border>

   <Border Grid.Row="1">
     <!-- Content that will take all the remaining space -->
   </Border>
</Grid>

ОБНОВЛЕНИЕ: На основе предоставленных вами скриншотов ...

Во-первых, избавьтесь от DockPanel в элементе управления верхнего уровня. DockPanel дает своему ребенку все пространство, которое он запрашивает. Если это не «заполняющий» дочерний элемент (LastChildFill="True"). Используйте grid вместо DockPanel (т. Е. На верхнем уровне a grid с двумя строками - один с автоматическими размерами для меню и второй с размером звездочки для остальных элементов, в этом ряду звездного размера поставить еще один grid для вас элементы управления и т. д.).

Помните, что всякий раз, когда вы помещаете содержимое в ячейку автоматического размера в сетке или в DockPanel с типом стыковки, отличным от Fill, содержимое будет занимать столько места, сколько требуется, без отображения полосы прокрутки (оно выйдет за окно).

ОБНОВЛЕНИЕ 2: Просмотр новых скриншотов (см. Комментарии к этой записи) ...

ОК, я думаю, что вижу проблему. Дело в том, что ItemsControl использует StackPanel для отображения своих дочерних элементов, но StackPanel также предоставляет своим дочерним элементам все необходимое пространство (ваш DataGrid считает, что у него достаточно места для рендеринга без полос прокрутки).

Чтобы исправить это, вам нужно поместить элементы управления в ScrollViewer следующим образом:

<ScrollViewer VerticalScrollBarVisibility="Auto"
              HorizontalScrollBarVisibility="Auto">
    <ItemsControl ... />
</ScrollViewer>
...