2010-02-09 4 views
20

J'ai, dans une fenêtre, un Grid qui contient un RadioButton, un TextBox et un Button, chacun dans la colonne 0, 1, 2, respectivement. Ils ont tous leurs hauteurs réglées sur Auto.WPF: Liaison de la hauteur d'un composant à un autre

Puis, dans une autre partie de la fenêtre, j'ai une autre Grid avec un Label, un TextBox et un Button, dans les colonnes 0, 1 et 2. Heights sont également mis à l'auto.

Le problème que j'ai est que la hauteur de la première grille est plus petite que la seconde. Je suppose que c'est parce que Label oblige le second à être plus grand. Comment puis-je faire en sorte que la première grille soit aussi grande que la seconde? J'ai essayé de faire ceci:

Nommez la zone de texte dans la deuxième grille SomeName.
Dans le <Grid.ColumnDeclarations> de la première grille, j'ai changé la hauteur de "auto" à "{Binding ElementName = SomeName, Path = Height}".

Mais cela n'a pas fait ce que je voulais. La taille était la même. Je suppose que la reliure est fondamentalement en train de devenir "auto" et de la jeter là, ce qui finit par être la même chose.

Aussi, je cherche une solution qui n'implique pas de définir les hauteurs à une valeur fixe.

Répondre

9

Mettre les deux grilles dans un shared size scope et utiliser SharedSizeGroup pour verrouiller les hauteurs de ramer ensemble:

<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> 

Voir aussi How to: Share sizing properties between grids en MSDN.

35

se lient à la ActualHeight plutôt que la propriété Height:

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

Cela n'a pas fonctionné non plus. La seule façon de le faire fonctionner était d'ajouter une étiquette et de la cacher. Argh. – zxcvbnm

+0

Curieux. Je l'ai testé avant de poster, mais avec un TextBlock plutôt qu'un TextBox. Peut-être un problème avec les marges ajoutées par la grille (je voulais me lier à l'ActualHeight de l'autre RowDefinition pour éviter ce problème, mais cela n'a pas fonctionné). – itowlson

+1

C'est en fait la bonne réponse. – Cogent

Questions connexes