2010-09-24 2 views
6

У меня есть пользовательский элемент управления, который я написал в WPF для отображения некоторых данных. Я хочу показать этот usercontrol в списке, но я также хочу предоставить несколько заголовков столбцов (соответствующие некоторым свойствам в пользовательском cotrol), чтобы пользователи могли сортировать по свойствам, содержащимся в usercontrol.Лучший способ разместить несколько столбцов в сетке/списке WPF?

Я не уверен, что это лучший способ.

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

В идеале хотелось бы что-то вроде этого:

Header1 Header2 Header3 Header4 
[UserControlThatSpansAllFourColumns] 

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

Если у кого есть какие-либо советы, я бы рад их приветствовать!

ответ

3

Хорошо, это ни в коем случае не «лучший способ», но я бы просто бросил это. Один из способов такого рода работы, как то, что вам нужно, - использовать ListView с пользовательским ItemContainerStyle, который использует вместо этого <ContentPresenter> по умолчанию <GridViewRowPresenter>. Этот короткий XAML несколько демонстрирует это:

<ListView> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListViewItem"> 
         <ContentPresenter/> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Header1"/> 
      <GridViewColumn Header="Header2"/> 
     </GridView> 
    </ListView.View> 

    <Button>Item1</Button> 
    <Button>Item2</Button> 

</ListView> 

Здесь вы получите заголовки столбцов, а элементы распределить по всей ListView. В этом решении, однако, рендеринг предметов является своего рода в собственном мире. Он действительно не связан со столбцами, определенными для ListView. Поэтому я предполагаю, что одним из способов улучшения этой работы является предоставление вашей собственной реализации <RowPresenter>, которая фактически учитывает GridViewColumns, определенные в родительском представлении.

В любом случае, надеюсь, что это поможет.

+0

спасибо! Это в основном то, что я искал. Я заменил ContentPresenter пользовательским UserControl, и он сработал. Небольшая сортировка магии, и у меня будет полное решение. –

+0

Это полезно, спасибо, пожалуйста, дайте мне знать, как мы можем сохранить пару столбцов как есть и объединить только определенные столбцы? – robot

Смежные вопросы