不在TreeViewItem上触发MouseLeftButtonDown

时间:2013-02-13 10:23:40

标签: silverlight-4.0 silverlight-toolkit

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


调用未来到TreeView_MouseLeftButtonDown事件处理程序.. 任何想法或解决方法?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

treeItem.AddHandler(UIElement.MouseLeftButtonDownEvent, new MouseButtonEventHandler(treeItem_MouseLeftButtonDown), true);