2010-03-10 4 views
3

Dans cet exemple de code, j'essaie de compenser la position Canvas de Grid par la hauteur de l'une de ses lignes. Est-ce que quelqu'un voit ce que je pourrais faire de mal? Comme vous pouvez le voir, j'ai essayé de déplacer la liaison plus bas dans le fichier xaml, juste au cas où le RowDefinitions devait être défini en premier. De toute façon, il ne semble pas à la matière, car Canvas.Top est toujours 0.Comment lier à la hauteur d'une RowDefinition?

<Canvas> 
    <Grid Canvas.Top="{Binding ElementName=DetailsRow, Path=ActualHeight}"> 
     <Grid.RowDefinitions> 
     <RowDefinition x:Name="NameRow" /> 
     <RowDefinition x:Name="DetailsRow" /> 
     </Grid.RowDefinitions> 
     <Button Grid.Row="0">Button</Button> 
     <Button Grid.Row="1">Button</Button> 

     <!-- I expected this to maybe work, but no dice 
     <Canvas.Top> 
     <Binding ElementName="DetailsRow" Path="ActualHeight" /> 
     </Canvas.Top> 
     --> 

    </Grid> 
</Canvas> 

Répondre

8

ActualHeight n'est pas une propriété de dépendance il est donc probablement pas déclencher une sorte de notification de changement. ActualHeight commence réellement à 0 jusqu'à ce que la grille soit mesurée, ce qui pourrait être une explication. Contrairement à FrameworkElement, qui définit ActualHeight comme propriété de dépendance, RowDefinition ne dérive pas de FrameworkElement et définit simplement ActualHeight comme une propriété normale sans événement de modification.

J'ai effectivement pensé au fait qu'il devrait y avoir une option BindingMode.Polling où le système de liaison interrogerait la propriété source à certains intervalles. Mais malheureusement, vous pourriez être coincé dans le code.

+0

Je n'ai pas remarqué que ce n'était pas une propriété de dépendance. Hm. Ok, je vais continuer à chercher, mais je pense que vous avez probablement raison de le faire dans le code. – moswald

+0

@mos, Une chance? – Josh

+2

J'ai fini par mettre un panneau dans cette rangée, en le nommant, puis en le liant à sa hauteur. Je reçois des erreurs de trace lors du démarrage, mais après la création de la fenêtre, tout semble fonctionner correctement. Si je peux trouver comment supprimer ces erreurs, je posterai ma solution ici. – moswald

Questions connexes