Laden...

Nach dem Vergrössern beim Verkleinern auch die Spaltenbreite wieder kleiner machen?

Erstellt von AnnaBauer21 vor 4 Jahren Letzter Beitrag vor 3 Jahren 1.526 Views
A
AnnaBauer21 Themenstarter:in
9 Beiträge seit 2020
vor 4 Jahren
Nach dem Vergrössern beim Verkleinern auch die Spaltenbreite wieder kleiner machen?

Hallo ihr Lieben,

ich habe ein Problem mit dem 'DataGrid' und finde dazu im Internet nichts brauchbares.

Ich hoffe ihr könnt mir helfen 🙂

Ich habe einen 'Slider' mit dem ich im 'DataGridColumnHeader' die Größe des Textes ändern kann.

Wenn ich den Text größer mache werden die Spalten automatisch vergrößert.
Wenn ich den Text dann wieder kleiner mache bleiben die Spalten aber vergrößert.
Die Spalten werden nicht automatisch wieder kleiner.

Wie kann ich das (am besten im Style, alternativ im Code) zum funktionieren bringen?
Es müsste unabhängig davon funktionieren ob ich die 'Columns' direkt im XAML definiere oder ob diese mit 'AutoGenerateColumns' automatisch erstellt werden.

Vielen Dank schonmal an euch

Liebe Grüße
Anna

4.939 Beiträge seit 2008
vor 4 Jahren

Wie genau änderst du die Größe des Textes? Ich nehme an per FontSize?

Die Spaltenbreite richtet sich jeweils nach dem eingestellten ColumnWidth bzw. je Spalte DataGridColumn.Width (Werte siehe Größenänderungsoptionen im DataGrid-Steuerelement unter "Größenanpassung von Spalten und Spaltenheader").

Wenn du nur die Größe des Headertexts änderst und die Spalten daran ausgerichtet haben möchtest, dann solltest du also SizeToHeader benutzen.

A
AnnaBauer21 Themenstarter:in
9 Beiträge seit 2020
vor 4 Jahren

Hallo,

vielen Dank für die Antwort.

**SizeToHeader ** habe ich bereits versucht aber leider ohne Auswirkung.
Die Spaltenbreite ist zwar initial auf die Breite des Headertextes angepasst, bei Änderung der Textgröße besteht mein beschriebenes Problem aber weiterhin.

Die Textgröße wird durch den Regler live angepasst, die Spalte wird auch live breiter, aber nicht mehr schmäler.

Ein weiteres Problem was ich durch **SizeToHeader **dann habe ist, dass der Inhalt in den einzelnen Zellen, wenn dieser länger ist als der Header, abgeschnitten ist.

Liebe Grüße
Anna

4.939 Beiträge seit 2008
vor 4 Jahren

Dann eben initial SizeToCells.

Evtl. hilft:


datagrid.InvalidateArrange();
datagrid.UpdateLayout();

?

A
AnnaBauer21 Themenstarter:in
9 Beiträge seit 2020
vor 3 Jahren

Auch das hat leider nichts gebracht.
Auf dem Bild ist ein Beispiel zu sehen, was ich versuche.

Wenn ich die Headertexte vergrößere und dann wieder verkleinere, werden die Roten Elemente verkleinert und es erscheint ein gelber Bereich, der dort nicht sein sollte.

Meine Erwartung wäre, dass die komplette Spalte wieder kleiner wird.
Die Spalte behält aber die Breite.

Ich habe folgenden Testcode:

<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>
3.825 Beiträge seit 2006
vor 3 Jahren

Wenn es im Style nicht geht muss man es selber machen (wie so oft in .NET) :

Spaltenbreiten merken und wenn die Schrift kleiner wird selbst kleiner machen. ich mache das bei einer ListView bei WinForms so.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

A
AnnaBauer21 Themenstarter:in
9 Beiträge seit 2020
vor 3 Jahren

Hallo Bernd,

vielen dank für die Antwort.

Schade, dass etwas so "einfaches" nicht mit den vorhandenen Möglichkeiten machbar ist.

Dann versuche ich dass mal.

Grüße Anna

W
955 Beiträge seit 2010
vor 3 Jahren

Warum zoomst du nicht einfach das Datagrid?


<mycontrol.LayoutTransform>
<ScaleTransform ScaleX="{Binding Zoom}" ScaleY="{Binding Zoom}" />
</mycontrol.LayoutTransform>

Das Zoom-property kannst du dann an dein Slider binden. Fertig.