est d'utiliser la liaison correcte ElementName
, pas Source
, lors de la liaison à un autre élément:
<Canvas>
<TextBlock x:Name="StopText" Text="Some test text"/>
<Rectangle Fill="SkyBlue"
Width="{Binding ElementName=StopText, Path=ActualHeight}"
Height="20"
RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Canvas>
En outre, vous vous rendez compte que vous liez la largeur de la Rectangle
au Height
du TextBlock
, droit ?
Si cela est vraiment la façon dont vous voulez configurer votre contrôle, vous voulez lier le Rectangle
ActualWidth
de Largeur de la TextBlock
', et Height
-ActualHeight
.
MISE À JOUR par les commentaires ci-dessous, voici une mise en œuvre en utilisant un Grid
sans liant:
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TextBlock x:Name="StopText" Text="Some test text"/>
<Rectangle Fill="SkyBlue"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Grid>
Grid
et Canvas
use different layout systems, et puisque vous n'utilisez pas la fonctionnalité du Canvas
fournit, Grid
est le meilleur choix.
La grande différence dans les éléments de l'enfant est que le Rectangle
utilise maintenant seulement horizontale et VerticalAlignment
-Stretch
à travers le Grid
entier, au lieu de se soucier de la taille de quoi que ce soit.
Bonne observation à propos de ElementName. Que faire si je voudrais le lier au canevas lui-même (l'élément principal de UserControl). Que dois-je définir? – serhio
Je voudrais simplement utiliser une grille au lieu d'un canevas, et vous n'avez pas besoin de liaison du tout. Je vais mettre à jour ma réponse. –
Hmm ... Avec Canvas, j'ai utilisé 'this.SetValue (Canvas.LeftProperty' pour définir l'emplacement de UserControl (à l'intérieur de UserControl) Comment puis-je faire maintenant, avec la Grille? – serhio