Z порядок между Image и InkPresenter - PullRequest
1 голос
/ 22 июля 2009

У меня есть этот CustomControl, который содержит InkPresenter и Image. Изображение имеет AdornerDecorator, так как я планирую добавить к нему рекламного объявления позже. Я установил Canvas.ZIndex из Image выше, чем InkPresenter, чтобы InkPresenter было нарисовано поверх изображения.

Проблема в том, что когда я пытаюсь собрать и отобразить чернила из InkPresenter, штрихи рисуются под изображением. (Я использовал для проверки визуального дерева, используя Snoop, и InkPresenter выше Image). Я не уверен, почему это так. Кто-нибудь здесь знает, почему Image нарисован поверх InkPresenter? Любая помощь очень ценится.

Мой код выглядит следующим образом:

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>

Я прикрепил события MouseDown, MouseUp, MouseMove и т. Д. К InkPresenter, так как позже планирую перенести обработку этих событий на другие классы.

К сожалению, эти события не фиксируются, потому что Image рисуется поверх InkPresenter, поэтому он получает события, а не InkPresenter. Кто-нибудь знает, почему это может быть?

Любая помощь очень ценится.

1 Ответ

1 голос
/ 22 июля 2009

Вы думаете о z-порядке в обратном направлении. Более высокие значения ближе к пользователю, поэтому изображение со значением 2 рисуется поверх чернил со значением 1.

См. MSDN

...