2011-10-20 4 views
13

Desidero creare un controllo personalizzato che verrà utilizzato come overlay. Il controllo dovrebbe contenere un paio di controlli figlio che dovrebbero essere disegnati e dovrebbero essere cliccabili come al solito. Ma tutto il resto nel controllo dovrebbe essere trasparente e "cliccabile".WPF: Come eseguire un controllo di sovrapposizione con canvas trasparente e child selezionabile

Ecco come cerco di ottenere questo risultato. Innanzitutto, sto usando gli eventi PreviewMouseDown \ Up \ Move nella finestra in cui verrà posizionato l'overlay. Voglio che questi eventi "passino attraverso" parte trasparente del mio controllo personalizzato, ma si fermano su non trasparente (ad esempio sul mio pulsante). In secondo luogo, qui è il codice XAML per il mio controllo (root nodo UserControl è stata lasciata intatta):

<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> 

Tuttavia, se ho impostato, l'intero controllo pulsante tra cui diventa Canvas' IsHitTestVisible false 'unhittable'. Se impostato su true, tutti gli eventi di tunneling si fermano al controllo personalizzato e il pulsante diventa invalicabile.

Qual è il modo giusto per ottenere questo tipo di comportamento? È possibile farlo senza sottoclasse tela (o qualsiasi altro pannello)?

risposta

18

È necessario impostare lo sfondo di Canvas su null (o semplicemente senza sfondo, null è l'impostazione predefinita). Transparent è "visibile" ai clic del mouse.

+0

Eeeek !!! era così semplice! grazie :) –

+0

@Pavel: prego :) – Vlad

+0

@Vlad, ciao, piacere di rivederti! Funziona in modo che quando lo sfondo è nullo significa che il pulsante interno non può essere cliccato, tuttavia, quando lo sfondo è trasparente significa che è possibile fare clic sul pulsante? /// A proposito, grazie mille per il tuo precedente aiuto. Intendo il controllo TextHighlightBlock (colore evidenziatore giallo/arancione). Mi hai aiutato a farlo velocemente. Molti ragazzi della mia compagnia mi hanno detto che il lavoro era stato fatto bene e questo controllo era una parte importante di questo. –

Problemi correlati