Question

J'ai essayé de créer un contrôle personnalisé, ayant un fond arrondi semi-transparent:

<Canvas>
    <TextBlock x:Name="StopText" Text="Some test text"/>
    <Rectangle Fill="SkyBlue"
               Width="{Binding Source=StopText, Path=ActualHeight}" 
               Height="20"  
               RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Canvas>

Le problème est que je ne peux pas, sans doute, se lient aux propriétés ActualHeight / ActualWidth, car ils ne sont pas ceux de dépendance.

Que faire pour mantenir le rectangle et de même taille textbox?

Était-ce utile?

La solution

La liaison correcte consiste à utiliser ElementName, non 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, non?

Si cela est vraiment la façon dont vous voulez configurer votre contrôle, vous voulez lier la largeur du Rectangle au TextBlock du ActualWidth et Height à ActualHeight.

UPDATE Selon 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 utiliser différents systèmes de mise en page , et puisque vous n'utilisez pas la fonctionnalité du Canvas fournit, Grid est le meilleur choix.

La grande différence entre les éléments de l'enfant est que le Rectangle utilise maintenant seulement horizontale et VerticalAlignment à Stretch sur l'ensemble Grid, au lieu de se soucier de la taille de quoi que ce soit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top