2009-07-22 5 views
1

Ich habe dieses CustomControl, das eine InkPresenter und eine Image enthält. Das Bild hat eine AdornerDecorator, da ich plane, dem Bild später einen Adorner hinzuzufügen. Ich habe die Canvas.ZIndex der Image höher als die InkPresenter gesetzt, so dass die InkPresenter über das Bild gezogen wird.Z Auftrag zwischen Bild und InkPresenter

Das Problem ist, dass, wenn ich versuche, Tinte aus dem InkPresenter zu sammeln und anzuzeigen die Striche unter dem Bild gezeichnet werden. (Ich habe verwendet, um den visuellen Baum mit Snoop zu überprüfen und die InkPresenter ist über der Image) Ich bin mir nicht sicher, warum das ist. Kennt jemand hier, warum die Image über die InkPresenter gezeichnet wird? Jede Hilfe wird sehr geschätzt.

Mein Code ist wie folgt:

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> 

Ich habe angebracht, um die MouseDown, MouseUp, MouseMove etc Ereignisse an den InkPresenter wie ich plane, den Umgang mit diesen Ereignissen zu bewegen zu anderen Klassen später.

Leider werden diese Ereignisse nicht erfasst, weil die Image über die InkPresenter gezeichnet wird, so dass es die Ereignisse statt der InkPresenter bekommt. Weiß jemand, warum das sein könnte?

Jede Hilfe wird sehr geschätzt.

Antwort

1

Sie denken über Z-Reihenfolge rückwärts. Die höheren Werte sind näher an den Benutzer, so dass das Bild mit dem Wert 2 1.

Siehe MSDN

mit Wert über die Tinte gezeichnet
+0

Dank: D Ich habe immer, dass umgekehrt ...: S – Nilu

Verwandte Themen