2010-02-10 21 views
2

Je tends la zone de texte WPF afin de placer une image personnalisée sur elle. Je veux capturer des clics de souris sur cette image. Jusqu'à présent, j'ai été en mesure d'utiliser arrangeOverride pour placer l'image là où j'en ai besoin mais comme il est placé à l'intérieur de la zone de texte, chaque fois que j'essaie de cliquer dessus, la zone de texte capture le clic et l'événement l'image ne se déclenche pas. Est-il possible d'indiquer que l'image doit être placée au-dessus de la zone de texte lors de l'utilisation de la commande de remplacement? Je sais que je peux contourner ce problème si j'ai étendu un contrôle et placé une zone de texte à l'intérieur, mais pour mon application j'ai besoin d'étendre réellement une zone de texte afin de pouvoir l'utiliser dans un autre contrôle plus complexe qui utilise actuellement une zone de texte.Comment contrôler la commande de placement lors de l'utilisation ArrangeOverride d'étendre les contrôles WPF

Merci!

Répondre

1

ArrangeOverride ne peut pas être la solution idéale pour cela. Une meilleure approche serait probablement d'utiliser le modèle de contrôle: créer un ControlTemplate contenant une grille avec une seule cellule et placer l'image et l'hôte du contenu de la zone de texte dans cette seule cellule. Vous pouvez placer implicitement l'image par l'ordre dans lequel vous placez les contrôles, ou explicitement en définissant la propriété jointe Panel.ZIndex.

L'une astuce ici est de savoir comment représenter l'hôte de contenu de la zone de texte. Cela doit être un ScrollViewer avec le nom PART_ContentHost. Donc, votre modèle ressemblera à quelque chose comme:

<ControlTemplate TargetType="{x:Type Ambog36sTextBox}"> 
    <Grid> 
    <ScrollViewer x:Name="PART_ContentHost" /> <!-- WPF will fill in a text edit area here --> 
    <Image Panel.ZIndex="1" Source="..." /> 
    </Grid> 
</ControlTemplate> 

puis attribuez-lui ce modèle à votre classe de boîte de texte personnalisé via le style par défaut de la manière habituelle.

+0

Merci! cette approche semble être la bonne façon de résoudre ce problème. – ambog36

0

Comme vous n'utilisez pas le modèle de composition standard, cela signifie que vous devez passer outre la manipulation de la souris avant d'atteindre le code de zone de texte et ajoutez votre propre logique personnalisée pour décider des événements à générer.