C # WPF Toolkit DataGrid - Группа внутри группы? -- c# поле с участием wpf поле с участием datagrid поле с участием toolkit пол Связанный проблема

C# WPF Toolkit DataGrid - Group inside Group?


1
vote

проблема

русский

У меня есть группа, в которой есть элементы внутри нее, и я бы хотел, чтобы эта группа была подгруппа.

<Сильные> Основные группы : «Windows», «Linux», «MAC» и Подгруппы : «Данные», «Основные», «Advanced»

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

Как я могу это сделать?

Вот немного моего кода:

 <код> <Window.Resources>     <CollectionViewSource x:Key="OSGroups">         <CollectionViewSource.GroupDescriptions>             <PropertyGroupDescription PropertyName="os"/>         </CollectionViewSource.GroupDescriptions>     </CollectionViewSource>      <Style x:Key="GroupContainerStyle" TargetType="{x:Type GroupItem}">         <Style.Resources>             <LinearGradientBrush x:Key="OutBrush" StartPoint="0,0" EndPoint="0,1">                 <GradientStop Offset="0" Color="#FEB74B"/>                 <GradientStop Offset="1" Color="#F19201"/>             </LinearGradientBrush>         </Style.Resources>         <Setter Property="Template">             <Setter.Value>                 <ControlTemplate TargetType="{x:Type GroupItem}">                     <Expander IsExpanded="True" Background="{StaticResource OutBrush}" BorderThickness="0">                         <Expander.Header>                             <Grid>                                 <Grid.ColumnDefinitions>                                     <ColumnDefinition Width="Auto"/>                                 </Grid.ColumnDefinitions>                                  <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0,0,10,0">                                     <TextBlock Text="{Binding Path=Name}"/>                                 </StackPanel>                             </Grid>                         </Expander.Header>                         <ItemsPresenter />                     </Expander>                 </ControlTemplate>             </Setter.Value>         </Setter>     </Style> </Window.Resources> <Grid>     <wpfToolkit:DataGrid Name="CommandsDataGrid" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding Source={StaticResource OSGroups}}" CellStyle="{StaticResource CellStyle}" HeadersVisibility="Column" Height="250" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">         <wpfToolkit:DataGrid.GroupStyle>             <GroupStyle ContainerStyle="{StaticResource GroupContainerStyle}">                 <GroupStyle.Panel>                     <ItemsPanelTemplate>                         <wpfToolkit:DataGridRowsPresenter/>                     </ItemsPanelTemplate>                 </GroupStyle.Panel>             </GroupStyle>         </wpfToolkit:DataGrid.GroupStyle>         <wpfToolkit:DataGrid.Columns>             <wpfToolkit:DataGridTextColumn Header="Command" Binding="{Binding Path=command}" />             <wpfToolkit:DataGridTextColumn Header="Description" Width="*" Binding="{Binding Path=description}" />         </wpfToolkit:DataGrid.Columns>     </wpfToolkit:DataGrid> </Grid>   
Английский оригинал

I have a group which have items inside it and I would like that group to have a subgroup.

Main groups: "Windows", "Linux", "Mac" and sub-groups: "Data", "Basic", "Advanced"

The sub-groups will be the ones that will contain the row items. Also, there can be different sub-groups for each main group.

How can I do that?

Here's some of my code:

<Window.Resources>     <CollectionViewSource x:Key="OSGroups">         <CollectionViewSource.GroupDescriptions>             <PropertyGroupDescription PropertyName="os"/>         </CollectionViewSource.GroupDescriptions>     </CollectionViewSource>      <Style x:Key="GroupContainerStyle" TargetType="{x:Type GroupItem}">         <Style.Resources>             <LinearGradientBrush x:Key="OutBrush" StartPoint="0,0" EndPoint="0,1">                 <GradientStop Offset="0" Color="#FEB74B"/>                 <GradientStop Offset="1" Color="#F19201"/>             </LinearGradientBrush>         </Style.Resources>         <Setter Property="Template">             <Setter.Value>                 <ControlTemplate TargetType="{x:Type GroupItem}">                     <Expander IsExpanded="True" Background="{StaticResource OutBrush}" BorderThickness="0">                         <Expander.Header>                             <Grid>                                 <Grid.ColumnDefinitions>                                     <ColumnDefinition Width="Auto"/>                                 </Grid.ColumnDefinitions>                                  <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="0,0,10,0">                                     <TextBlock Text="{Binding Path=Name}"/>                                 </StackPanel>                             </Grid>                         </Expander.Header>                         <ItemsPresenter />                     </Expander>                 </ControlTemplate>             </Setter.Value>         </Setter>     </Style> </Window.Resources> <Grid>     <wpfToolkit:DataGrid Name="CommandsDataGrid" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding Source={StaticResource OSGroups}}" CellStyle="{StaticResource CellStyle}" HeadersVisibility="Column" Height="250" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">         <wpfToolkit:DataGrid.GroupStyle>             <GroupStyle ContainerStyle="{StaticResource GroupContainerStyle}">                 <GroupStyle.Panel>                     <ItemsPanelTemplate>                         <wpfToolkit:DataGridRowsPresenter/>                     </ItemsPanelTemplate>                 </GroupStyle.Panel>             </GroupStyle>         </wpfToolkit:DataGrid.GroupStyle>         <wpfToolkit:DataGrid.Columns>             <wpfToolkit:DataGridTextColumn Header="Command" Binding="{Binding Path=command}" />             <wpfToolkit:DataGridTextColumn Header="Description" Width="*" Binding="{Binding Path=description}" />         </wpfToolkit:DataGrid.Columns>     </wpfToolkit:DataGrid> </Grid> 
</div
           

Список ответов

1
 
vote

Примечание, вдавливание работает только с одной подпортной группой, поскольку у нас есть только «ISBottomLevel», а не «уровень».

 <код>     <CollectionViewSource x:Key="OSGroups">         <CollectionViewSource.GroupDescriptions>             <PropertyGroupDescription PropertyName="os"/>             <PropertyGroupDescription PropertyName="subGroup"/>         </CollectionViewSource.GroupDescriptions>     </CollectionViewSource>     <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">         <Setter Property="Template">             <Setter.Value>                 <ControlTemplate TargetType="{x:Type GroupItem}">                     <Expander IsExpanded="True">                         <Expander.Style>                             <Style TargetType="{x:Type Expander}">                                 <Style.Triggers>                                     <DataTrigger Binding="{Binding IsBottomLevel}" Value="True">                                         <Setter Property="Margin" Value="20,0,0,0" />                                     </DataTrigger>                                  </Style.Triggers>                             </Style>                         </Expander.Style>                         <Expander.Header>                             <TextBlock Text="{Binding Name}"/>                         </Expander.Header>                         <ItemsPresenter Margin="-10,0,0,0" />                     </Expander>                 </ControlTemplate>             </Setter.Value>         </Setter>     </Style>   
 

Note, the indentation only works with one sub group, since we only have "IsBottomLevel" and not "Level".

    <CollectionViewSource x:Key="OSGroups">         <CollectionViewSource.GroupDescriptions>             <PropertyGroupDescription PropertyName="os"/>             <PropertyGroupDescription PropertyName="subGroup"/>         </CollectionViewSource.GroupDescriptions>     </CollectionViewSource>     <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">         <Setter Property="Template">             <Setter.Value>                 <ControlTemplate TargetType="{x:Type GroupItem}">                     <Expander IsExpanded="True">                         <Expander.Style>                             <Style TargetType="{x:Type Expander}">                                 <Style.Triggers>                                     <DataTrigger Binding="{Binding IsBottomLevel}" Value="True">                                         <Setter Property="Margin" Value="20,0,0,0" />                                     </DataTrigger>                                  </Style.Triggers>                             </Style>                         </Expander.Style>                         <Expander.Header>                             <TextBlock Text="{Binding Name}"/>                         </Expander.Header>                         <ItemsPresenter Margin="-10,0,0,0" />                     </Expander>                 </ControlTemplate>             </Setter.Value>         </Setter>     </Style> 
</div
 
 
0
 
vote

Вы можете определить ни один из стилей внутри <код> DataGrid.GroupStyle элемента. Рассмотрим ниже XAML, здесь я определил двух групповых контейнеров, а именно <код> GroupContainerStyle и <код> SecondGroupContainerStyle . Теперь для основной группы (1-й уровень) <код> final int MAX_VALUE = 100; Random rand = new Random(); int randValue1 = rand.nextInt(MAX_VALUE); int randValue2 = rand.nextInt(MAX_VALUE); 0 будет применяться и для ваших подгрупп (2-й уровень) <код> final int MAX_VALUE = 100; Random rand = new Random(); int randValue1 = rand.nextInt(MAX_VALUE); int randValue2 = rand.nextInt(MAX_VALUE); 1 будет применяться автоматически.

в <Код> final int MAX_VALUE = 100; Random rand = new Random(); int randValue1 = rand.nextInt(MAX_VALUE); int randValue2 = rand.nextInt(MAX_VALUE); 2 Вы можете изменить вдавливание, как спазмто.

 <код> final int MAX_VALUE = 100; Random rand = new Random(); int randValue1 = rand.nextInt(MAX_VALUE); int randValue2 = rand.nextInt(MAX_VALUE); 3  
 

You can define any no of styles inside DataGrid.GroupStyle element. Consider the below xaml, here I have defined two group container styles namely GroupContainerStyle and SecondGroupContainerStyle. Now for the main group(1st level) GroupConstainerStyle will be applied and for your subgroups(2nd level) SecondGroupContainerStyle will be applied automatically.

In SecondGroupContainerStyle you could change the indentation like how spasrto has done.

<wpfToolkit:DataGrid Name="CommandsDataGrid" AutoGenerateColumns="False" IsReadOnly="True" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding Source={StaticResource OSGroups}}" CellStyle="{StaticResource CellStyle}" HeadersVisibility="Column" Height="250" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">     <wpfToolkit:DataGrid.GroupStyle>         <GroupStyle ContainerStyle="{StaticResource GroupContainerStyle}">             <GroupStyle.Panel>                 <ItemsPanelTemplate>                     <wpfToolkit:DataGridRowsPresenter/>                 </ItemsPanelTemplate>             </GroupStyle.Panel>         </GroupStyle>          <GroupStyle ContainerStyle="{StaticResource SecondGroupContainerStyle}">             <GroupStyle.Panel>                 <ItemsPanelTemplate>                     <wpfToolkit:DataGridRowsPresenter/>                 </ItemsPanelTemplate>             </GroupStyle.Panel>         </GroupStyle>                </wpfToolkit:DataGrid.GroupStyle>  </wpfToolkit:DataGrid> 
</div
 
 

Связанный проблема

1  C # код для объемного обновления SQL Server  ( C sharp code to bulk update sql server ) 
У нас есть этот код C #, который будет обновлять таблицу базы данных SQL Server на основе флагов в структуре. <код> public struct stSRK { public string...

770  Файл метаданных '.dll' не может быть найден  ( Metadata file dll could not be found ) 
Я работаю над проектом WPF, C # 3.0, и я получаю эту ошибку: <код> Error 1 Metadata file 'WORK=- ToolsVersionManagementSystemBusinessLogicLayerinDebug Busi...

2  Компиляция страницы ASPX не удается  ( Aspx page compilation fails ) 
Мы разрабатываем веб-приложение, которое позволяет администраторам загружать плагины. Все плагины хранятся в специальной папке вне корня приложения (скажем, C...

2  Как создать файл XPS с веб-страницы, используя C #?  ( How to create xps file from web page using c ) 
Как создать файл XPS с веб-страницы, используя C #? Любые идеи? ...

0  DataGridTextColumn с десятичным значением, разрешить отсутствие ввода  ( Datagridtextcolumn with decimal value allow no entry ) 
Использование .NET 4.6. У меня есть DataGridTextColumn, связанный с decimal? свойства. (Мне нужна помощь от этого Ссылка , чтобы вообще работать.) Можно ...

2  Dotnetzip - чтение на память  ( Dotnetzip reading to memory ) 
Я собрал быстрый тест, используя библиотеку Dotnetzip, которая открывает ZIP-файл, полный файлов .bmp и преобразует их в формат .jpg. До этого я писал все ф...

0  Внедрить свойство с пользовательским атрибутом  ( Implement property with custom attribute ) 
Может быть, я получаю концепцию пользовательских атрибутов не так, но я подумал, что это должно быть что-то, что было бы возможно: У меня есть класс со стро...

157  Попытался прочитать или писать защищенную память. Это часто является признаком того, что другая память повреждена  ( Attempted to read or write protected memory this is often an indication that ot ) 
Я надеюсь, что кто-то может просветить меня относительно того, что может вызвать эту ошибку: попытался прочитать или писать защищенную память. Это часто яв...

1  Получите только имя от LDAP в ASP.NET C #  ( Get just the name from ldap in asp net c sharp ) 
Я хочу диаметровать все имена, которые совпадают с именем, имеющим имя с именем пользователя с сервера каталогов, используя LDAP и связывают его к виду сетки....

-2  Рассчитать номера диапазона IP из 2 заданных IP-адресов [Закрыто]  ( Calculate ip range numbers from 2 given ip addresses ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

3  Как использовать различные настройки приложения для различных конфигураций сборки?  ( How to use different application settings for different build configurations ) 
В верхней части афоризма - вкладка (красная) свойств проекта Есть 2 серых раскрывающихся коробки (зеленые), которые я хотел бы использовать. Я хочу измен...

1  Как изменить координаты текста на странице PDF из нижнего левого слева  ( How to change the coordinates of a text in a pdf page from lower left to upper l ) 
Я использую pdfbox и itextsharp dll и обработаю PDF. Так что я получаю текстовые координаты текста в прямоугольнике. Координаты прямоугольника извлекаются с п...

-1  Ошибка - RaceOnrcwleanean был обнаружен во время параллельного метода Parallel.invoke  ( Error raceonrcwcleanup was detected during parallel invoke method ) 
Я пытаюсь экспортировать все листы файла Excel, используя следующую часть кода. Я звоню один метод, используя разные значения параметров. Это дает мне после...

2  Получение G-WAN для работы с моно  ( Getting g wan to work with mono ) 
Я следовал инструкциям на сайте G-WAN FAQ и прочитал руководство, но я не могу получить G-WAN, чтобы «увидеть» мономонтаж на мою установку Debian 6 (x64). Я...

0  Как использовать запрос LINQ для обновления базовой таблицы базы данных  ( How do i use a linq query to update the underlying database table ) 
Я использую сильно напечатанный набор данных, и я покажу свой псевдо-код ниже. То, что я пытаюсь сделать, это только выбрать только одно значение столбца из б...

Связанный проблема

1  C # код для объемного обновления SQL Server 
770  Файл метаданных '.dll' не может быть найден 
2  Компиляция страницы ASPX не удается 
2  Как создать файл XPS с веб-страницы, используя C #? 
0  DataGridTextColumn с десятичным значением, разрешить отсутствие ввода 
2  Dotnetzip - чтение на память 
0  Внедрить свойство с пользовательским атрибутом 
157  Попытался прочитать или писать защищенную память. Это часто является признаком того, что другая память повреждена 
1  Получите только имя от LDAP в ASP.NET C # 
-2  Рассчитать номера диапазона IP из 2 заданных IP-адресов [Закрыто] 
3  Как использовать различные настройки приложения для различных конфигураций сборки? 
1  Как изменить координаты текста на странице PDF из нижнего левого слева 
-1  Ошибка - RaceOnrcwleanean был обнаружен во время параллельного метода Parallel.invoke 
2  Получение G-WAN для работы с моно 
0  Как использовать запрос LINQ для обновления базовой таблицы базы данных 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.