2009-07-22 5 views
1

J'ai ce CustomControl qui contient un InkPresenter et un Image. L'image a un AdornerDecorator que je prévois d'ajouter un adorner à l'image plus tard. J'ai placé le Canvas.ZIndex du Image pour être plus haut que le InkPresenter de sorte que le InkPresenter soit dessiné au-dessus de l'image.Ordre Z entre Image et InkPresenter

Le problème est que lorsque j'essaie de collecter et d'afficher de l'encre à partir du InkPresenter, les traits sont dessinés sous l'image. (J'ai utilisé pour vérifier l'arbre visuel en utilisant Snoop et le InkPresenter est au-dessus du Image) Je ne sais pas pourquoi c'est. Est-ce que quelqu'un ici sait pourquoi le Image est dessiné sur le InkPresenter? Toute aide est très appréciée.

Mon code est le suivant:

generic.xaml

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:HotSpotImage"> 
    <Style TargetType="{x:Type local:HotSpotImage}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:HotSpotImage}"> 
        <ControlTemplate.Resources> 
         <local:StringtoImageSource x:Key="ImageSourceConverter"/> 

        </ControlTemplate.Resources> 
        <Canvas Width="{TemplateBinding Width}" 
          Height="{TemplateBinding Height}">  
         <InkPresenter Canvas.ZIndex="1" 
             x:Name="PART_InkPresenter" 
             Width="{TemplateBinding Width}" 
             Height="{TemplateBinding Height}"/> 
         <Image Canvas.ZIndex="2" x:Name="PART_Image" 
           Width="{TemplateBinding Width}" 
           Height="{TemplateBinding Height}" Source="{Binding 
           RelativeSource={RelativeSource TemplatedParent}, 
           Path=Source, 
           Converter={StaticResource ImageSourceConverter}}"/> 
        </Canvas> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

Je joins les MouseDown, MouseUp, MouseMove événements etc à la InkPresenter que je prévois de déplacer la manipulation de ces événements à d'autres classes plus tard.

Malheureusement, ces événements ne sont pas capturés car le Image est dessiné au-dessus du InkPresenter afin qu'il obtienne les événements plutôt que le InkPresenter. Est-ce que quelqu'un sait pourquoi cela peut être?

Toute aide est très appréciée.

Répondre

1

Vous pensez à l'ordre inverse. Les valeurs plus élevées sont plus proches de l'utilisateur, ainsi l'image avec la valeur 2 est tirée sur l'encre avec la valeur 1.

Voir MSDN

+0

merci: D J'ai toujours eu que l'inverse ...: S – Nilu