При использовании ScrollViewer как часть шаблона для некоторого управления, левый клик обрабатывается

Рассмотрим первую версию кода (MainWindow.xaml):

<ScrollViewer>
    <local:CustomControl1 Width="1000" Height="1000" Background="Red"/>
</ScrollViewer>

, где CustomControl1 получен из элементовControl. Внутри CustomControl1 я переопределял событие OnMousedown. Этот код отлично работает, и я поймаю событие мыши.

Теперь вторая версия кода (MainWindow.xaml):

<local:CustomControl1 Width="1000" Height="1000" Background="Red"/>

Внутри Generic.xaml, я изменяю шаблон моих элементов управления:

            <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">

                    <ScrollViewer 
                        VerticalScrollBarVisibility="Visible" 
                        HorizontalScrollBarVisibility="Visible"
                        >
                        <ItemsPresenter/>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>

, когда я надеваю ScrollViewer как часть шаблона управления, я больше не получаю OnMousedownEvent ( для левой кнопкой мыши). По какой-то причине теперь событие мыши, помеченное как обработанное. Если вместо того, чтобы переопределить OnMousedown, я использую следующее утверждение внутри элементов управления конструктором, событие ловится:

AddHandler(Mouse.MouseDownEvent, new MouseButtonEventHandler(OnMouseDown), true);

Во-первых, я хотел бы понять, почему размещение ScrollViewer внутри шаблона, изменяющее поведение мыши. Во-вторых, кто-нибудь знает какой-то обходной путь? Решение, которое я предложил (от ловли обрабатываемых событий) не принимается для меня. В моем приложении мне нужно обрабатывать события мыши только в том случае, если ни один из предметов не контролирует, детями не обрабатывают его.

заранее спасибо.

13
задан Illidan 14 August 2011 в 04:52
поделиться