首先考虑代码的第一个版本(MainWindow.xaml):
<ScrollViewer>
<local:CustomControl1 Width="1000" Height="1000" Background="Red"/>
</ScrollViewer>
CustomControl1继承自ItemsControl。在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>
当我将滚动条作为控件模板的一部分时,我不再收到OnMouseDownEvent事件(左键点击)。由于某种原因,现在鼠标按下事件被标记为已处理。如果不是通过覆盖OnMouseDown方法,而是在项控件构造函数中使用以下语句,则可以捕获事件:
AddHandler(Mouse.MouseDownEvent, new MouseButtonEventHandler(OnMouseDown), true);
首先,我想了解为什么在模板中放置scrollviewer会改变鼠标按下的行为。其次,有谁知道一些解决方法吗?
我提出的解决方案(通过捕捉已处理事件)对我来说不可接受。在我的应用程序中,只有在没有任何项目控件子级处理它时,我才需要处理鼠标按下事件。
先行致谢。