2

<Grid x:Name="LayoutRoot" Background="White">
    <sdk:TreeView MouseLeftButtonDown="TreeView_MouseLeftButtonDown">
        <sdk:TreeViewItem Header="this is first item"/>
    </sdk:TreeView>
</Grid>


调用不会出现在 TreeView_MouseLeftButtonDown 事件处理程序中。有什么想法或解决方法吗?

4

2 回答 2

1

您是否注意到单击 Silverlight 按钮时不会触发 MouseLeftButtonDown 和 MouseLeftButtonUp 事件?这样做的原因是按钮通过覆盖 OnMouseLeftButtonDown 和 OnMouseLeftButtonUp 处理程序来处理这两个事件本身。在 OnMouseLeftButtonDown 覆盖中,引发 Click 事件,并且 MouseLeftButtonDown 事件被标记为已处理,因此它不会在可视树中冒泡。OnMouseLeftButtonUp 覆盖还将 MouseLeftButtonUp 标记为已处理。

可以使用 Button 控件的 ClickMode 属性更改此内容。它具有以下值 - 悬停、按下、释放。默认是 Pressed,我们已经解释过了。当我们将 ClickMode 设置为 Release 时,将在 OnMouseLeftButtonUp 覆盖中引发 Click 事件,并且 MouseLeftButtonDown 和 MouseLeftButtonUp 事件将再次在按钮内处理。如果我们将 ClickMode 设置为 Hover,则 Click 事件将与 MouseEnter 事件一起引发,我们也将能够使用鼠标按钮事件。

于 2013-02-14T05:08:53.960 回答
0

这背后的原因是因为也TreeView处理此类事件。要覆盖此类处理,您必须使用以下代码在代码中处理它:

treeItem.AddHandler(UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(treeItem_MouseLeftButtonDown), true);
于 2018-09-30T17:08:36.960 回答