Bei meinem Datagrid hätte ich gerne, dass sich die Spalten immer der Fenstergröße anpassen.
Das funktioniert auch, wenn ich folgende Einstellungen benutze.
<Style x:Key="mainGrid" TargetType="{x:Type DataGrid}">
<Setter Property="ColumnWidth" Value="*" />
<Setter Property="AutoGenerateColumns" Value="False" />
<Setter Property="IsReadOnly" Value="False" />
<Setter Property="CanUserAddRows" Value="True" />
<Setter Property="CanUserResizeColumns" Value="True" />
<Setter Property="GridLinesVisibility" Value="none" />
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="RowHeaderWidth" Value="0" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="MinRowHeight" Value="50" />
</Style>
Allerdings habe ich ja bei dieser Konfiguration am Schluss die leer Zeile.
Wegen CanUserAddRows = True.
Setzte ich CanUserAddRows auf False, dass die Spalte wegfällt. Ist die Zeile zwar weg aber dafür sind meine Spalten klein. Siehe Bild.
Jemand eine Idee wie ich das hinbekomme, dass meine Spalten immer maximal breit sind und die leere Zeile verschwindet?
Habe schon alle möglichen Kombinationen durch probiert auch mit IsReadOnly usw.
Hi, zeig mal mehr von deinem Code. Bei mir wird die Spaltenbreite unabhängig von der CanUserAddRows Property entsprechend der Window Width aufgeteilt.
<Window x:Class="debug.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:debug"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style x:Key="mainGrid" TargetType="{x:Type DataGrid}">
<Setter Property="ColumnWidth" Value="*" />
<Setter Property="AutoGenerateColumns" Value="False" />
<Setter Property="IsReadOnly" Value="False" />
<Setter Property="CanUserAddRows" Value="True" />
<Setter Property="CanUserResizeColumns" Value="True" />
<Setter Property="GridLinesVisibility" Value="none" />
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="RowHeaderWidth" Value="0" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="MinRowHeight" Value="50" />
</Style>
</Window.Resources>
<Grid>
<DataGrid Style="{StaticResource mainGrid}" ItemsSource="{Binding Items}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}"/>
<DataGridTextColumn Binding="{Binding Street}"/>
<DataGridTextColumn Binding="{Binding Postal}" />
<DataGridTextColumn Binding="{Binding City}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
So geht es ja auch.
Setzte mal CanUserAddRows auf False.
Dann sollte es nicht mehr gehen.
Ich habe jetzt folgendes feststellen können.
Ich habe auch eine Gruppierung in meinem Datagrid.
Wenn ich beim Expander die Eigenschaft isExpanded="True" setze dann funktioniert ist.
Ist beim ERSTEN laden des DataGrid alles zugeklappt funktioniert es nicht.
Klappe ich aber dann eine Zeile mal auf und aktualisiere mein Grid dann über einen Button, also lade die Daten neu rein, dann passen die Header plötzlich.
Was anderes nebenbei...
Wenn ich das so wie untenstehend in meinem Grid definiere, kann ich aus dem Code raus nicht auf den Expander (dataGridExpander) zugreifen um die Eigenschaft isExpanded zu ändern.
Lösche ich <DataGrid.GroupStyle>, <GroupStyle>, <GroupStyle.ContainerStyle>, <Style TargetType="{x:Type GroupItem}">, <Setter Property="Template">, <Setter.Value>, <ControlTemplate TargetType="{x:Type GroupItem}">
habe ich Zugriff, allerdings funktioniert das Grid dann nicht mehr.
Es kommt dann immer die Meldung:
Items collection must be empty before using ItemsSource.
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander x:Name="dataGridExpander" IsExpanded="False" Style="{StaticResource dataGridGroupExpander}">
<Expander.Header>
<Grid Height="40">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250"></ColumnDefinition>
<ColumnDefinition Width="270"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Grid.Column="0">
<TextBlock Text="{Binding Items[0].Name}" VerticalAlignment="Center" />
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Column="1" >
<TextBlock Text="[" VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock Text="{Binding Items[0].Anzahl}" Margin="0,0,5,0" VerticalAlignment="Center" />
<TextBlock Text="{DynamicResource gridNumberOfWorksteps}" VerticalAlignment="Center" />
<TextBlock Text="]" VerticalAlignment="Center" Margin="5,0,0,0"/>
</StackPanel>
<Button Grid.Column="2" HorizontalAlignment="Right" Name="cmdDeleteProcess" Tag="{Binding Items[0].ID_Vorgaenge}" Style="{StaticResource buttonDelete}" ToolTip="{DynamicResource buttonDeleteProcess}" Click="cmdDeleteProcess_Click" Margin="0,0,15,0" />
<Button Grid.Column="3" HorizontalAlignment="Right" Style="{StaticResource buttonAdd}" Tag="{Binding Items[0].ID_Vorgaenge}" ToolTip="{DynamicResource buttonAddWorkStep}" Click="cmdAddWorkStep_Click" >
<TextBlock Text="{DynamicResource buttonAddWorkStep}" />
</Button>
</Grid>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
Kannst du bitte für Entwickler, die das gleiche Problem haben, die Lösung posten? =)
Hatte mich getäuscht.
Das Problem besteht weiterhin!
SORRY
Kann man nicht einfach die letzte Zeile irgendwie ausblenden?
Habe das Problem jetzt so "gelöst" indem ich der Page das Event "Loaded" angehängt habe. Dort setzte ich dann canuseraddrows auf false.
Damit kann ich jetzt erstmal leben.
Ich hatte gerade das Problem, dass die Spaltengrößenanpassung nicht mehr funktionierte, sobald sich das DataGrid (oder eines der Elemente, in dem es sich befindet) in einem ScrollViewer befindet.
Ich konnte das umgehen, indem ich die Width- des DataGrids an die ActualWidth-Property eines übergeordneten Objekts mit gleicher Breite gebunden habe.