2011-10-20 10 views
13

Quiero hacer un control personalizado que se utilizará como una superposición. El control debe contener un par de controles secundarios que deben dibujarse y deben poder hacer clic como de costumbre. Pero todo lo demás en el control debe ser transparente y "clicable".WPF: Cómo hacer un control de superposición con un lienzo transparente y un elemento secundario en el que se puede hacer clic

Así es como trato de lograr esto ... En primer lugar, estoy usando PreviewMouseDown \ Up \ Move events en la ventana donde se va a colocar la superposición. Quiero que estos eventos "atraviesen" una parte transparente de mi control personalizado, pero se detengan en no transparente (por ejemplo, en mi botón). En segundo lugar, aquí está el xaml de mi control (nodo de control de usuario raíz se dejó intacto):

<Canvas Background="transparent" IsHitTestVisible="true"> 
    <Button Canvas.Left="384" Canvas.Top="34" Content="Button" Height="23" Name="button1" Width="75" Click="button1_Click" IsHitTestVisible="True" /> 
    <TextBlock Canvas.Left="27" Canvas.Top="105" Height="36" Name="textBlock1" Text="TextBlock" Width="432" FontSize="24" IsHitTestVisible="False" Foreground="Red" FontWeight="Bold" /> 
</Canvas> 

Sin embargo si fijo lienzo IsHitTestVisible a falso, todo el control que incluye el botón se convierte en 'unhittable'. Si establece el valor en true, todos los eventos de túnel se detienen en el control personalizado y el botón deja de aparecer.

¿Cuál es la forma correcta de lograr este tipo de comportamiento? ¿Es posible hacerlo sin subclasificar el lienzo (o cualquier otro panel)?

Respuesta

18

Debe establecer el fondo de Canvas en null (o simplemente no fondo, null es el valor predeterminado). Transparent es "visible" a los clics del mouse.

+0

wow! ¡fue tan simple! gracias :) –

+0

@Pavel: de nada :) – Vlad

+0

@Vlad, hola, me alegro de verte de nuevo! ¿Funciona de manera que cuando el fondo es nulo significa que no se puede hacer clic en el botón adentro, sin embargo, cuando el fondo es transparente, se puede hacer clic en el botón? /// Por cierto, muchas gracias por tu ayuda anterior. Me refiero al control TextHighlightBlock (color de resaltado amarillo/naranja). Me ayudaste a hacerlo rápido. Muchos muchachos en mi compañía me dijeron que el trabajo se había hecho bien, y que este control era una parte importante del mismo. –

Cuestiones relacionadas