Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
2296 / 1612 / 400
Регистрация: 26.06.2017
Сообщений: 4,774
Записей в блоге: 1

Заголовок внутри каждой группы

17.04.2025, 14:59. Показов 2927. Ответов 26

Студворк — интернет-сервис помощи студентам
Добрый день.

Как внутри каждой группы поместить заголовок?
Суть в чём - есть DataGrid, к которому биндится CollectionViewSource и затем настраивается группировка данных. При этом я хочу отключить заголовок у самой DataGrid и отображать его внутри каждой группы.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
                <DataGrid x:Name="PersonGrid"
                      Grid.Row="0"
                      ItemsSource="{Binding Source={StaticResource groupingPersons}}"
                      SelectedItem="{Binding SelectedPerson}"
                      IsReadOnly="True"
                      AutoGenerateColumns="False"                          
                      HeadersVisibility="None">
 
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Гр.№" Binding="{Binding GroupNumber, Mode=OneWay}" Width="Auto"/>
                    <DataGridTextColumn Header="ФИО" Binding="{Binding Converter={StaticResource PersonConverter}}" Width="Auto"/>
                </DataGrid.Columns>
 
                <DataGrid.GroupStyle>
                    <GroupStyle>
                        <GroupStyle.ContainerStyle>
                            <Style TargetType="{x:Type GroupItem}">
                                <Setter Property="Margin" Value="5,0,5,5"/>
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="{x:Type GroupItem}">
                                            <Expander IsExpanded="True" 
                                                      BorderThickness="5,5,5,5">
                                                <Expander.Header>
                                                    <DockPanel>
                                                        <TextBlock Text="{Binding Path=Name}"
                                                                   FontWeight="Bold" 
                                                                   Margin="5,0,0,0"/>
                                                    </DockPanel>
                                                </Expander.Header>
                                                <ItemsPresenter/>
                                            </Expander>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </GroupStyle.ContainerStyle>
                    </GroupStyle>
                </DataGrid.GroupStyle>
            </DataGrid>
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.04.2025, 14:59
Ответы с готовыми решениями:

Студент определяет свой номер N в списке группы. Старосте группы сообщается идентификатор M группы
:cry::cry::cry: Решить задание нужно до 25.11.2018. SOS!!!!!

Вычислить среднюю успеваемость группы по каждой из дисциплин и в целом успешность группы.
Help!!! 3. В двумерном массиве хранится информация об оценках каждого с 20 студентов группы по...

Разработать приложение «Альбом группы», в котором список группы отображается через элемент DataGridView
Разработать приложение «Альбом группы», в котором список группы отображается с помощью элемента...

26
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 3
24.04.2025, 00:53
Студворк — интернет-сервис помощи студентам
Элд Хасп, ой, не заметил... Точно дублируется.
И это прям на learn.microsoft лежало?? Вот я тоже слепой..
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
24.04.2025, 11:22
Цитата Сообщение от wizard41 Посмотреть сообщение
И это прям на learn.microsoft лежало?? Вот я тоже слепой..
Не лежало.
Я взял его за основу, чтобы не колдовать с созданием исходной группировки.
На это ушло бы больше времени и сил чем на на сам ответ по этой теме.
И добавил в него отражение заголовков колонок.

Строки XAML, которые обведены, это инжекция моего кода в пример:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вот фрагмент XAML создающий отражение DataGridColumnHeadersPresenter в каждой группе.
Добавлено через 23 минуты
Uswer, на всякий случай предупреждаю.
Моё решение зависит от шаблона DataGrid.
Подходит к тому, который в данное время у меня на компе с Wind10.
Шаблоны по умолчанию для WPF устанавливаются темами Windows.
Поэтому нет гарантий, что такое решение будет работать "всегда и везде".

Для более общего решения, независящего от реализации шаблона, потребуется "вытащить" PART_ColumnHeadersPresenter сначала на уровень DataGrid и уже потом его использовать для получения отражения в группе.
Чтобы это сделать нужно создать не менее 2-х (скорее всего 3 или 4) Attached Property с логикой по обнаружению PART_ColumnHeadersPresenter, определению его положения и транслирования этого всего в группу.

Другой подход - это явная установка шаблона DataGrid, чтобы изменение темы не могло непредсказуемо повлиять на шаблон.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
24.04.2025, 11:22
Добавлено через 3 часа 11 минут
Uswer, просьба на будущее.
Когда задаёте вопросы, особенно сложные, давайте какой-то пример кода для воспроизведение.
Пример должен быть полным, чтобы просто скачать его и запустить в Студии. В крайнем случае, чтобы можно было за 1-2 копипаста вставить в Студию.
Иначе на создание исходного кода может уйти времени гораздо больше чем на поиск ответа.

В данном случае, на создание отражения заголовков в группировке у меня ушло минут 10-15. Но если бы мне не попался код примера на learn, я бы даже не приступил к решению.
Выложи вы такой пример сразу в вопросе, то уже давно получили бы ответ.
1
2296 / 1612 / 400
Регистрация: 26.06.2017
Сообщений: 4,774
Записей в блоге: 1
25.04.2025, 10:49  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Когда задаёте вопросы, особенно сложные, давайте какой-то пример кода для воспроизведение.
ОК.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но если бы мне не попался код примера на learn
Кстати, именно оттуда я и взял стиль групп. И что-то не подумал, что тяжело разобраться. В целом цель достигнута, спасибо.

Добавлено через 45 секунд
Цитата Сообщение от Элд Хасп Посмотреть сообщение
особенно сложные
А это был сложный вопрос?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
25.04.2025, 12:54
Цитата Сообщение от Uswer Посмотреть сообщение
А это был сложный вопрос?
Не типичный.
С таким не сталкиваешься каждый день. И ответить без теста в Студии вряд ли на него кто-то сможет.

А по реализации - не сложный.
Нужно было только запустить в дебагере и посмотреть визуальное дерево GroupItem. Там стало понятно как нужно было "пропутешествовать" по нему, чтобы добраться до представления заголовков.
Дело 10-15 минут.
Не без запускаемого кода не ответишь.
0
 Аватар для Andrey-MSK
3392 / 2278 / 388
Регистрация: 14.08.2018
Сообщений: 7,703
Записей в блоге: 4
28.04.2025, 10:43
Uswer, Вот навороченный DataGrid, но только за денежку... Умееет оченно много - https://docs.devexpress.com/WP... /data-grid
0
2296 / 1612 / 400
Регистрация: 26.06.2017
Сообщений: 4,774
Записей в блоге: 1
28.04.2025, 11:51  [ТС]
За денежку не мой вариант, но за участие в теме спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2025, 11:51

Вычислить средний балл группы и распечатать список студентов, имеющих средний балл выше среднего балла группы
Помогите, пожалуйста, решить задачу: вычислить средний балл группы и распечатать список студентов,...

Разделение картинки на группы и добавление на территорию этой группы точек
Имеется картинка плана здания больницы с помещениями, входы в помещения помечены. По api передается...

Составьте новый массив из чисел, взятых по одному из каждой группы равных членов данной последовательности
пусть даны целые числа а1,а2,..., аn, среди которых могут быть повторяющиеся. Составьте новый...

Из каждой группы чисел взять по первому числу
Здравствуйте, подскажите, есть группы числе в столбик, как можно из каждой группы взять по первому...

Составьте массив из чисел, взятых по одному из каждой группы равных членов данной последовательности
Решите пожалуйста: Пусть даны целые числа a1,a2,...,an , среди которых могут быть повторяющиеся....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru