wpf расширитель данных показывает x элементов
У меня есть Expander
в моем DataGrid
, но я хочу показать только ДВУХ элементов, а затем, когда пользователь нажмет на раскрытие, показать остальные элементы.
Как это можно сделать?
<DataGrid.GroupStyle>
<GroupStyle AlternationCount="7" >
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="False" Background="{Binding XPath=recipient_color}">
<Expander.Header>
<Label Content="{Binding}">
</Label>
</Expander.Header>
<Expander.Content>
<ItemsPresenter/>
</Expander.Content>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
2 ответа
Другой способ сделать это, который потребовал бы больше возиться с xaml, это изменить шаблон элемента управления Expander. В шаблоне управления на MSDN вы можете видеть, что строка сетки с именем ContentRow
, Высота этой строки начинается с 0, затем триггер на IsExpanded
свойство расширяет его до желаемой высоты. Если вы установите по умолчанию ContentRow
высота примерно до 50 (или любая другая высота, необходимая для отображения количества элементов, которое вы хотите), будет отображаться верхняя часть элементов группы, когда расширитель свернут.
Вы можете прочитать больше о том, как изменить ControlTemplates здесь.
- В заголовке вашего экспандера добавьте элемент управления по вашему выбору, который может отображать 2 первых элемента вашего списка.
- Привязать видимость вышеуказанного элемента управления к свойству IsExpanded экспандера, чтобы этот элемент скрывался при расширении экспандера (используйте IValueConverter)
- Создайте содержимое вашего экспандера, чтобы показать все элементы.
Таким образом, когда расширитель не развернут, он покажет 2 элемента в заголовке (стиль по вашему вкусу). Когда пользователь расширяется, 2 элемента исчезают, расширитель раскрывается, и весь список отображается снова.
Удачи!