Laden...

Seltsames Verhalten von Gridsplitter: Bug oder Feature?

Erstellt von nordside vor 16 Jahren Letzter Beitrag vor 13 Jahren 2.985 Views
nordside Themenstarter:in
186 Beiträge seit 2007
vor 16 Jahren
Seltsames Verhalten von Gridsplitter: Bug oder Feature?

Hallo,

ich habe folgendes Verhalten festgestellt:


<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="10"/>
    <ColumnDefinition/>
  </Grid.ColumnDefinitions>
  <Canvas Grid.Column="1"/>
  <Canvas Background="AliceBlue" Grid.Column="0"/>
  <GridSplitter x:Name="splitter" ShowsPreview="True" Background="Black" Width="2"
      HorizontalAlignment="Right" VerticalAlignment="Stretch" Opacity="1"/>
</Grid>

Wenn ich bei der Breite der GridSpalten einen festen Wert eingebe, kann ich den Splitter über die tatsächliche Größe des Fensters ziehen. Lasse ich den Wert weg bzw. lege einen relativen Wert fest ("1*") kann man das nicht.

Bug oder Feature?
nordside

Hinweis: Gute GUI-Entwickler legen natürlich Größenangaben von Objekten einer grafischen Benutzeroberfläche nicht statisch fest ⚠

C
92 Beiträge seit 2010
vor 13 Jahren

Habe so ein ähnliches Problem, das seinen Ursprung in der vorhergehenden Frage hat:

              <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="10*" MinWidth="10"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="35*" MinWidth="10"/>
                    </Grid.ColumnDefinitions>
                        <GridSplitter Grid.Column="1" Width="5" ResizeBehavior="PreviousAndNext">
                    </GridSplitter>
                    <TreeView Name="treeView" Grid.Column="0" BorderThickness="0" Width="175"/>
                    </Grid>

MinWidth funktioniert einwandfrei, der GridSplitter lässt sich optimal bedienen... einziges Manko:
Wenn ich die Fenstergröße ändere (z.B. maximiere), dann ändern sich die Breiten der Spalten so, dass die relative Größenordnung (also 10 zu 35) noch beibehalten werden.
Ich möchte aber, dass die breite der ersten Spalte einen absolutwert hat, der sich beim maximieren des Fensters nicht ändert. Leider funktioniert dann aber nicht mehr Minwidth der zweiten Spalte, wenn ich die relativen Breitenangaben durch absolute ersetze...

hat jemand eine Idee? Bei google findet man leider auch nur Fragen zu diesem Thema, aber keine vernünftigen antworten....

mfg Cuin

C
92 Beiträge seit 2010
vor 13 Jahren

Habe ein kleines, wenn auch sehr spezifisches Workaround dazu entwickelt. Man setzt einfach MinWidth der ersten Spalte auf einen festen Wert und MaxWidth läßt man anhand der Größe des Grids berechnen.

MaxWidth="{Binding Converter={StaticResource MaxWidthConverter}, ElementName=Grid, Path=ActualWidth, ConverterParameter=12}"

mfg Cuin