2010-02-09 5 views
20

Ich habe, in einem Fenster, eine Grid, die eine RadioButton, eine TextBox und eine Button, jeweils in Spalte 0, 1, 2 enthält. Sie haben alle ihre Höhen auf auto eingestellt.WPF: Binden der Höhe einer Komponente an andere

Dann wird in einem anderen Teil des Fensters, habe ich eine andere Grid mit einem Label, einem TextBox und einem Button, in Spalten 0, 1 und 2. Die Höhen werden auch auf auto gesetzt.

Das Problem, das ich habe, ist, dass die Höhe des ersten Gitters kleiner ist als die des zweiten. Ich schätze, das liegt daran, dass Label die zweite Person dazu zwingt, größer zu sein. Wie kann ich es so machen, dass das erste Gitter so groß ist wie das zweite? Ich habe versucht, dies zu tun:

Benennen Sie die Textbox im zweiten Raster SomeName.
In der <Grid.ColumnDeclarations> des ersten Grid, änderte ich die Höhe von "auto" auf "{Binding ElementName = SomeName, Path = Höhe}".

Aber das hat nicht getan, was ich wollte. Die Größe war die gleiche. Ich schätze, die Bindung wird im Grunde "automatisch" und wirft sie dort hin, was letztendlich dasselbe ist.

Auch suche ich nach einer Lösung, die nicht die Höhen auf einen festen Wert setzt.

Antwort

9

Setzen Sie die beiden Gitter in einem shared size scope, und verwenden Sie SharedSizeGroup die Zeilenhöhen zu verriegeln zusammen:

<SomeContainer Grid.IsSharedSizeScope="True"> <!-- Could be the Window or some more nearby Panel --> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition SharedSizeGroup="LabelAndRadioButtonGroup" /> 
    </Grid.RowDefinitions> 
    <Label Grid.Row="0" /> 
    </Grid> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition SharedSizeGroup="LabelAndRadioButtonGroup" /> 
    </Grid.RowDefinitions> 
    <RadioButton Grid.Row="0" /> 
    </Grid> 
</SomeContainer> 

Siehe auch How to: Share sizing properties between grids in MSDN.

35

binden an die ActualHeight anstatt die Height Eigenschaft:

<RowDefinition Height="{Binding ActualHeight, ElementName=otherTextBox}" /> 
+0

Das hat auch nicht funktioniert. Der einzige Weg, wie ich es zum Laufen brachte, war ein Etikett hinzuzufügen und es zu verstecken. Argh. – zxcvbnm

+0

Neugierig. Ich habe es vor dem Posten getestet, allerdings mit einem TextBlock anstelle einer TextBox. Vielleicht ein Problem mit vom Raster hinzugefügten Rändern (ich wollte an die ActualHeight der anderen RowDefinition binden, um dieses Problem zu vermeiden, aber das hat nicht funktioniert). – itowlson

+1

Das ist eigentlich die richtige Antwort. – Cogent

Verwandte Themen