3 Stimmen

Verwendung von SharedSizeGroup mit ColumnSpan in einem Wpf-Gitter

Wenn ich ein Raster mit einem SharedSizeGroup auf Spalten und eine Spalte übergreifende Steuerung erstellen, geht das Raster "mental" Ruckeln um und maxing aus einem CPU-Kern.

Ich bin sicher, es gibt einen guten Grund, warum das nicht funktioniert, aber mir fällt keiner ein! Wie kann ich dieses Größenlayout sonst erreichen?

<Grid IsSharedSizeScope="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Columns"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Columns"/>
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <Label Grid.Column="0">Blah</Label>
        <Label Grid.Column="1">Blah Blah Blah Blah</Label>

        <Label Grid.Row="1" Grid.ColumnSpan="2">ajsgdeererajgsfdg dfg df gdfg djgsad</Label>
    </Grid>

4voto

John Bowen Punkte 23673

Was Sie getan haben, ist im Grunde eine unendliche Rekursion in Ihrem Layout einzurichten.

  • Um die Größe gemeinsam zu nutzen, müssen die Spalten zunächst ihre eigene Größe berechnen.
  • Sie können sich dann auf der Grundlage der größeren (hier wahrscheinlich Spalte 1).
  • Nach dem Erweitern von Spalte 0 auf der Größe von Spalte 1 entspricht, kann das dritte Etikett nun mehr Platz in der Spalte
  • Beim Verschieben von Spalten wird der Platz der in Spalte 1 benötigt wird, kleiner, so dass Spalte 1 verkleinert werden kann, um den neuen Platzbedarf ihres Inhalts Inhalt benötigt.
  • Spalte 1 berechnet nun ihre Größe neu (beginnen Sie wieder beim ersten Schritt)

SharedSizeGroup ist dafür gedacht, in verschiedenen Grids verwendet zu werden, um die Ausrichtung von Elementen beizubehalten, die in verschiedenen Containern untergebracht sind, wie z.B. verschiedene Listenelemente oder eine Kopfzeile. Wenn Sie eine gleichmäßig aufgeteilte Zeile benötigen, die nicht gestreckt wird, können Sie stattdessen etwas anderes wie * große Spalten oder ein UniformGrid verwenden.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <UniformGrid Rows="1" HorizontalAlignment="Left">
        <Label >Blah</Label>
        <Label >Blah Blah Blah Blah</Label>
    </UniformGrid>

    <Label Grid.Row="1">ajsgdeererajgsfdg dfg df gdfg djgsad</Label>
</Grid>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X