WPF Как установить текст заголовка DataGrid.Group, когда он фактически свернут
Я работаю с приложением WPF и сгруппировал свои элементы, используя <DataGrid.GroupStyle>
Мне интересно, как я могу установить заголовок текста, когда группа свернута. Я загружаю ордера в эту сгруппированную сетку, и когда я сворачиваю определенную группу, я хотел бы видеть что-то вроде Order: номер ордера, потому что легче ориентироваться Прямо сейчас я вижу только номер заказа, но как я могу добавить текст к:
<DockPanel>
<TextBlock FontWeight="Bold" Text="{Binding Path=Name}" /> //+ some text
</DockPanel>
(Кроме того, после того, как я добавил <DataGrid.Columns>
поскольку я хочу добавить свои столбцы вручную, внезапно вертикальный ползунок появляется на экране, даже если больше нет элементов слева или справа, и это выглядит плохо и раздражает, как я могу удалить этот ползунок, я хочу сохранить столбцы таблицы данных, потому что я хочу стилизовать их, как я хочу, но я не хочу видеть этот слайдер:/?)
Вот мой код:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10*" />
</Grid.ColumnDefinitions>
<DataGrid Grid.Column="0" RowHeaderWidth="0" CanUserAddRows="False" AutoGenerateColumns="False" x:Name="datagrid1" Margin="10,150,8,50" Background="Transparent" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" ItemsSource="{Binding}">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="Black"/>
<Setter Property="Opacity" Value="0.5"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="Height" Value="50"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ProductName}" Header="Title" MinWidth="50" FontSize="16" FontFamily="Verdana" />
<DataGridTextColumn Binding="{Binding Quantity}" Header="Quantity" MinWidth="30" FontSize="16" FontFamily="Verdana" />
<DataGridTextColumn Binding="{Binding NumberOfOrder}" Header="Order number" MinWidth="30" FontSize="16" FontFamily="Verdana" />
<DataGridTextColumn Binding="{Binding User}" Header="User" Width="*" FontSize="16" FontFamily="Verdana" />
</DataGrid.Columns>
<DataGrid.GroupStyle>
<!-- Style for groups at top level. -->
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="True">
<Expander.Header>
<DockPanel>
<TextBlock FontWeight="Bold" Text="{Binding Path=Name}" /> //I am wondering what does this line mean?
</DockPanel>
</Expander.Header>
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>
PS Скриншот вертикального ползунка @ нижней части моей сетки данных
1 ответ
Нам нужно Trigger
здесь, как показано ниже, и IValueConverter
чтобы найти количество предметов в группе:
<Expander.Style>
<Style TargetType="Expander">
<Style.Triggers>
<Trigger Property="IsExpanded" Value="True">
<Setter Property="Header">
<Setter.Value>
<DockPanel>
<TextBlock FontWeight="Bold" Text="{Binding Name}" />
</DockPanel>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsExpanded" Value="False">
<Setter Property="Header">
<Setter.Value>
<DockPanel>
<TextBlock FontWeight="Bold">
<TextBlock.Inlines>
<Run Text="{Binding Name}"/>
<Run Text=" ( "/>
<Run Text="{Binding Name, Converter={StaticResource ItemCountCnvKey}}" />
<Run Text=" ) "/>
</TextBlock.Inlines>
</TextBlock>
</DockPanel>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Expander.Style>
ItemCountConverter
public class ItemCountConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
CollectionViewGroup group = (CollectionViewGroup)value;
ReadOnlyObservableCollection<object> items = group.Items;
return items.Count;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}