2011-01-11 11 views
34

Ich habe eine Benutzersteuerung, nenne es Usercontrol, die ein Raster mit den folgenden Spaltendefinitionen hat:Grid SharedSizeGroup und * Sizing

<Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="A"/> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="B"/> 
      <ColumnDefinition Width="*" SharedSizeGroup="C"/> 
      <ColumnDefinition Width="Auto" SharedSizeGroup="D"/> 
      <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="E"/> 
      <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="F"/> 
      <ColumnDefinition Width="110" SharedSizeGroup="G"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/> 
      <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/> 
</Grid.ColumnDefinitions> 

Ich habe auch Mainwindow, die ein Gitter selbst enthält, mit folgenden Eigenschaft definiert auf dem Gitter:

Grid.IsSharedSizeScope="True" 

Nun habe ich eine Reihe von Benutzersteuerelemente an dem Gitter in Mainwindow (jeweils auf einer separaten Zeile). Mein Ziel ist es, dass jede Spaltenbreite der verschiedenen UserControls synchron bleibt. Bei der Verwendung von SharedSizeGroup funktioniert alles einwandfrei, mit einer Ausnahme. Es scheint, dass sich jede Spalte mit einer Breite von * nicht wie gewünscht verhält. Es sieht so aus, als wären die * Spaltenbreiten so eingestellt, als wären sie stattdessen Auto.

Gibt es Einschränkungen/Probleme mit SharedSizeGroup und * Sizing? Dies scheint der beste Weg zu sein, um die Spaltenbreiten synchron zu halten, aber ich kann das anscheinend nicht beheben.

Danke.

Antwort

46

MSDN:

Spalten und Zeilen, die in Größe Teilung teilnehmen respektieren Sizing nicht Stern. In der Größe Teilung Szenario wird Stern Schlichte als Auto

behandelt

Wenn Sie Sterne verwenden dann würden alle Spalten die gleiche Breite, so dass Sie die gleiche SharedSizeGroup alle zuweisen sollten, wenn Sie die auto- nichts dagegen Sizing Aspekt: ​​

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="A"/> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="B"/> 
    <ColumnDefinition Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition Width="Auto" SharedSizeGroup="D"/> 
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition MinWidth="30" Width="*" SharedSizeGroup="StarDontWork"/> 
    <ColumnDefinition Width="110" SharedSizeGroup="G"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="H"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="I"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="J"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="K"/> 
    <ColumnDefinition MinWidth="30" Width="Auto" SharedSizeGroup="L"/> 
</Grid.ColumnDefinitions> 

(Von diesem Verhalten folgt auch, dass Sie die Width Eigenschaft fallen kann, wenn SharedSizeGroup gesetzt) ​​


Wenn alle Spalten für die automatische Größenanpassung in gemeinsam genutzten Größengruppen enthalten sind, können Sie davon ausgehen, dass alle Spalten mit Sterngröße die gleiche Größe haben wie jedes Raster im Bereich die gleiche Menge an ungenutztem Speicherplatz, der an die Sterngröße verteilt wird Säulen.

Ein einfaches Beispiel:

<Grid.ColumnDefinitions> 
    <ColumnDefinition SharedSizeGroup="A"/> 
    <ColumnDefinition SharedSizeGroup="B" Width="*"/> 
    <ColumnDefinition SharedSizeGroup="C"/> 
</Grid.ColumnDefinitions> 

Wie erklärt die Width="*" wird nichts tun, sondern als Spalten 0 und 2 synched sind, Spalte 1 muss auch synchronisiert werden, so dass Sie nur die SharedSizeGroup fallen können:

<Grid.ColumnDefinitions> 
    <ColumnDefinition SharedSizeGroup="A"/> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition SharedSizeGroup="C"/> 
</Grid.ColumnDefinitions> 
+0

Danke für den Link. Wenn Sie die Spalten * auf eine andere SharedSizeGroup setzen, werden die Spalten aller Spalten leider synchronisiert (was erwartet wird), aber nicht das, wonach ich suche. Ich brauche jede Spaltenbreite, um einzeln synchronisiert zu werden. – Flack

+0

Was ich vorgeschlagen habe, ist * genau das, was der Star normalerweise tun würde *, ich verstehe nicht, was Sie wollen ... –

+2

Seien Sie vorsichtig damit. Meine App, nichts zu tun, verbraucht deshalb 100% eines CPU-Kerns. Sobald ich die "SharedSizeGroup" entfernt habe, verbraucht sie wie erwartet 0. – AlexeiOst