Eine weitere WPF DataGrid-bezogene Frage.WPF DataGrid gruppierte Zeilen in Expander fügt zusätzliche Spalte auf der rechten Seite hinzu, verschwindet, wenn alle Expander geschlossen sind
Ich habe ein DataGrid, dessen Zeilen gruppiert sind, und jede Gruppe ist unter einem Expander-Steuerelement. Es gibt zwei Spalten pro Zeile. Standardmäßig habe ich alle Expander geöffnet. Die Breite der zweiten Spalte ist auf "*" gesetzt und die Zeilenüberschriften wurden bereits deaktiviert.
Wenn ich alle Expander schließe, ändert das Layout ein winziges bisschen und verschiebt die Expandersteuerung ein wenig nach links. Wenn ich einen der Expander öffne, verschiebt er das kleinste Bit nach rechts. Ich merke auch, dass bei geöffnetem Expander die Spaltenüberschriften auf der rechten Seite eine zusätzliche Spalte zeigen, wodurch die horizontale Bildlaufleiste erscheint.
Wie kann ich die Datagrid-Deklaration anpassen, damit diese zusätzliche Spalte nicht vorhanden ist/erscheint, wenn ein Expander geöffnet ist?
<Grid>
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled" >
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding Path=MyCollection}"
GridLinesVisibility="None"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserReorderColumns="False"
CanUserSortColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
HeadersVisibility="Column">
<DataGrid.Resources>
<ResourceDictionary>
<Style x:Key="{x:Type DataGridCell}" TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="BorderBrush" Value="{x:Null}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="BorderBrush" Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="{x:Type DataGridRow}" TargetType="{x:Type DataGridRow}">
<Setter Property="Margin" Value="4" />
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="BorderBrush" Value="{x:Null}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="BorderBrush" Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</DataGrid.Resources>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter />
</ItemsPanelTemplate>
</GroupStyle.Panel>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander Margin="4"
IsExpanded="True">
<Expander.Header>
<StackPanel Orientation="Horizontal"
Margin="4">
<TextBlock FontWeight="Bold"
FontSize="14"
Text="{Binding Path=Name}" />
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Width="Auto">
...
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
...
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
</Grid>
Es scheint, dass explizit die Bildlaufleiste Eigenschaften festlegen, wie Sie vorschlagen, in ein anderes Verhalten führt, aber nicht das Verhalten ich suche. Mit diesen Einstellungen erhalte ich keine Bildlaufleisten, selbst wenn ich Zeilenelemente über das Ende des Rasters hinaus habe. Die zusätzliche Spalte scheint jetzt keine Probleme mit der Größenänderung zu verursachen, aber jede Zeile ist auf der rechten Seite leicht abgeschnitten, so als ob der Container Platz hinter dem sichtbaren Bereich reserviert. – sethlj11