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