【问题标题】:MouseLeftButtonDown is not fired on TreeViewItem在 TreeViewItem 上未触发 MouseLeftButtonDown
【发布时间】:2013-01-28 20:47:43
【问题描述】:

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


调用未到达 TreeView_MouseLeftButtonDown 事件处理程序.. 有什么想法或解决方法吗?

【问题讨论】:

    标签: silverlight-4.0 silverlight-toolkit


    【解决方案1】:

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

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

    【讨论】:

    • 您是从外部来源获得的吗?如果是这样,将链接添加到您从中获取它的来源会有所帮助。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多