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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top