WPF GridView: колонка "Газета"? - PullRequest
3 голосов
/ 02 марта 2010

Я не уверен, как еще описать это, не называя это "газетной" колонкой.

По сути, у меня есть потенциально длинный список кодов, которые я хочу отобразить в сетке, и у меня ограниченное вертикальное пространство. Я хотел бы показать эти коды (которые все из одного столбца базы данных) в нескольких столбцах, может быть 3-5 столбцов в поперечнике.

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

Ответы [ 2 ]

5 голосов
/ 02 марта 2010

Это на самом деле тривиально, используя WrapPanel.

Для жестко закодированного списка:

<WrapPanel Orientation="Vertical">
  <ItemOne />
  <ItemTwo />
  ...
</WrapPanel>

Для списка с привязкой к данным:

<ItemsControl ItemsSource="...">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel Orientation="Vertical" />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <ItemsControl.ItemTemplate>
    <DataTemplate DataType="...">
      ...
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

При желании вы можете заменить ItemsControl на ListBox или сделать его ComboBox или любым другим. Вы можете использовать шаблон по умолчанию для ваших данных или использовать пользовательский шаблон, как показано выше. Вы даже можете использовать ListView вместе с GridView, если вам нужен список из нескольких столбцов.

0 голосов
/ 02 марта 2010

Я подозреваю, что здесь вы видите настраиваемую панель макета, которая имеет четко определенную высоту и затем переносится в следующий столбец. Затем вы можете использовать ItemsPanelTemplate элемента управления списком, чтобы использовать новую пользовательскую панель.

Что касается разработки самой панели, я подозреваю, что либо перенос, либо наследование от Grid будет отличным первым выбором. Затем панель может сама управлять определениями столбцов в зависимости от количества содержащихся в них элементов.

Чтобы определить расположение отдельных элементов, я подозреваю, что использование ActualHeight для определения того, когда другой элемент вызовет переполнение столбца, и использование этого для перехода к следующему столбцу будет оптимальным решением. Я полагаю, что использование одной вертикальной панели стека без рамки или отступов внутри каждого столбца может облегчить разгрузку макета на эти элементы управления, но я полагаю, что вам все равно придется определить, на какую панель выложить элементы в зависимости от высоты предмета.

...