none
Dynamische GUI (DataGrid) RRS feed

  • Frage

  • Hallo ihr Lieben,

    ich habe ein Problem, an dem ich seit 2 Wochen herumexperimentiere.
    Ich finde einfach keine Lösung und hoffe ihr könnt mir helfen.
    Ich habe dazu ein kleines Testprojekt erstellt.

    Ich vergrößere durch einen Slider den Text im Header eines DataGrid's. -> Die Spalten werden breiter!
    Ich verkleinere durch einen Slider den Text im Header wieder -> Die Spalten behalten ihre breite!

    Ich suche eine Möglichkeit, mit der sich die Spalten des DataGrid's wieder entsprechend verkleinern.

    Initial zeigt die Tabelle nach starten des Testprogramms, dann vergrößere ich den Headertext, und dann mache ich ihn wieder kleiner.

    Mit dem Programm Snoop habe ich herausgefunden, dass die einzelnen DataGridColumnHeader die richtige Größe haben, was man auch an dem rot umrahmten Headertext links oben sehen kann.

    Der Gelbe Bereich der nach dem Verkleinern erscheint, ist wie in Snoop zu sehen ist, ein Grid welches im DataGridColumnsPresenter liegt.

    Ich habe folgenden Code:

    <Style
    	x:Key="ColumnHeaderStyleT11"
    	BasedOn="{StaticResource {x:Type DataGridColumnHeader}}"
    	TargetType="{x:Type DataGridColumnHeader}">
    	<Setter Property="Background" Value="Pink" />
    	<Setter Property="FontSize" Value="{Binding ElementName=Text1, Path=Value, UpdateSourceTrigger=PropertyChanged}" />
    	<Setter Property="HorizontalAlignment" Value="Left" />
    	<Setter Property="HorizontalContentAlignment" Value="Left" />
    </Style>
    
    ...
    
    <TextBox
    	Grid.Row="0"
    	Grid.Column="2"
    	Grid.ColumnSpan="2"
    	Text="{Binding ElementName=Text1, Path=Value, UpdateSourceTrigger=PropertyChanged}" />
    <Slider
    	Name="Text1"
    	Grid.Row="0"
    	Grid.Column="6"
    	Grid.ColumnSpan="2"
    	VerticalAlignment="Center"
    	IsSnapToTickEnabled="True"
    	Maximum="30"
    	Minimum="17"
    	TickFrequency="1"
    	Value="{Binding Minimum, RelativeSource={RelativeSource Self}, Mode=OneTime}" />
    
    <DataGrid
    	x:Name="PART_MyDataGrid1"
    	Grid.Row="1"
    	Grid.RowSpan="11"
    	Grid.Column="0"
    	Grid.ColumnSpan="12"
    	AutoGenerateColumns="True"
    	CanUserReorderColumns="True"
    	CanUserResizeColumns="True"
    	CanUserResizeRows="True"
    	CanUserSortColumns="True"
    	ColumnHeaderStyle="{DynamicResource ColumnHeaderStyleT11}"
    	ColumnWidth="SizeToHeader"
    	ItemsSource="{Binding MyList}">
    </DataGrid>

    Ich hoffe sehr, dass ihr mir weiterhelfen könnt.
    Ich habe auch schon versucht im Code über ein SizeChanged Event die Breiten der einzelnen Headerelemente und auch aller einzelnen Cell Elemente der Rows direkt zu setzen aber bin auch da gescheidert und es erschien mir als totaler Unsinn.

    Liebe Grüße
    Anna

    Dienstag, 2. Juni 2020 05:48

Alle Antworten

  • Hallo Anna,

    Ich suche eine Möglichkeit, mit der sich die Spalten des DataGrid's wieder entsprechend verkleinern.
    Ich bin auf ein Codebeispiel für das LoadingRow-Ereignis gestoßen und hoffe, dass es Dir weiterhelfen wird. Es wird dabei die Breite verringert, UpdateLayout() aufgerufen und gleich danach die Breite auf Auto festgelegt, damit sie sich an die Länge des längsten in der Spalte befindlichen Textes anpasst. Im Thread findest Du auch, wie dies mit einem angefügten Verhalten (attached behaviour) bewerkstelligt werden kann:
    WPF DataGrid: reduce column width to fit its content while scrolling

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 10. Juni 2020 08:03
    Administrator
  • Hallo Anna,

    Hast Du es mit dem LoadingRow-Ereignis oder mit dem angefügten Verhalten versucht? Ist der Thread noch aktuell?

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 6. Juli 2020 14:57
    Administrator