Z порядок между Image и InkPresenter

У меня есть этот 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 ответ

Решение

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

Смотрите MSDN

Другие вопросы по тегам