La unión a ActualHeight no funciona
-
05-10-2019 - |
Pregunta
He intentado crear un control personalizado, teniendo un fondo redondeado semitransparente:
<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>
El problema es que no puedo, probablemente, se unen a las propiedades ActualHeight
/ ActualWidth
, porque ellos no son los de dependencia.
¿Qué hacer para MANTENER el rectángulo y cuadro de texto del mismo tamaño?
Solución
La unión correcta es utilizar ElementName
, no Source
, cuando la unión a otro elemento:
<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>
Además, se dan cuenta de que va a enlazar el ancho de la Rectangle
a la Height
del TextBlock
, ¿verdad?
Si esta es realmente la forma en que desea configurar su control, que va a querer unirse Ancho del Rectangle
a TextBlock
del ActualWidth
y Height
a ActualHeight
.
Actualizar
Por los comentarios a continuación, aquí es una aplicación usando un Grid
sin unión:
<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 y Canvas
href="https://stackoverflow.com/questions/1075911/grid-vs-canvas"> uso de diferentes sistemas de diseño , y ya que no está utilizando la funcionalidad del Canvas
proporciona, Grid
es la mejor opción.
La gran diferencia en los elementos secundarios es que el Rectangle
ahora sólo utiliza horizontal y VerticalAlignment
a Stretch
en toda la Grid
, en lugar de preocuparse acerca de los tamaños de nada.