Лучший способ охватить несколько столбцов в таблице / списке WPF? - PullRequest
6 голосов
/ 24 сентября 2010

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

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

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

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

Header1   Header2  Header3   Header4
[UserControlThatSpansAllFourColumns]

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

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

1 Ответ

3 голосов
/ 25 сентября 2010

Хорошо, это ни в коем случае не "лучший способ", но я бы просто добавил это. Один из способов, который вам нужен, это использование 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.Поэтому я думаю, что один из способов улучшить эту работу - это предоставить собственную реализацию <RowPresenter>, которая фактически учитывает GridViewColumns, определенную в родительском представлении списка.

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

...