首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF树视图MouseLeftButtonDown事件不工作

WPF树视图MouseLeftButtonDown事件不工作
EN

Stack Overflow用户
提问于 2018-08-20 17:10:53
回答 2查看 152关注 0票数 0

我是WPF的新手。我已经使用WPF中的树视图创建了一个静态菜单。但左菜单单击事件未触发。我有以下代码。

代码语言:javascript
复制
<UserControl x:Class="navigationApp.dashboard"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:navigationApp"
             mc:Ignorable="d" 
             d:DesignHeight="650" d:DesignWidth="1120">
    <Grid >
        <TreeView>
            <TreeViewItem Header="Dashboard" Name="menuDashboard" MouseLeftButtonDown="menuDashboard_MouseLeftButtonDown"/>
            <TreeViewItem Header="Customer">
                <TreeViewItem Header="Customer Listing" Name="menuCustomerList" MouseLeftButtonDown="menuCustomerList_MouseLeftButtonDown"/>
                <TreeViewItem Header="Add New Customer" Name="menuCustomerReg" MouseLeftButtonDown="menuCustomerReg_MouseLeftButtonDown"/>
            </TreeViewItem>
            <TreeViewItem Header="Settings"/>
        </TreeView>
    </Grid>
</UserControl>

是否需要额外的代码?

EN

回答 2

Stack Overflow用户

发布于 2018-08-20 20:24:08

您可以使用单个SelectedItemChanged事件处理程序:

代码语言:javascript
复制
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
    TreeViewItem clickedTreeViewItem = e.NewValue as TreeViewItem;
    //...
}

XAML:

代码语言:javascript
复制
<TreeView SelectedItemChanged="TreeView_SelectedItemChanged">
    <TreeViewItem Header="Dashboard" Name="menuDashboard" />
    <TreeViewItem Header="Customer">
        <TreeViewItem Header="Customer Listing" Name="menuCustomerList" />
        <TreeViewItem Header="Add New Customer" Name="menuCustomerReg" />
    </TreeViewItem>
    <TreeViewItem Header="Settings"/>
</TreeView>
票数 1
EN

Stack Overflow用户

发布于 2022-02-24 04:47:30

如果TreeViewItem是可聚焦的,则该事件将被消费。您可以注册一个全局事件处理程序以再次转发事件。

代码语言:javascript
复制
static MyClass()
{
    EventManager.RegisterClassHandler(typeof(TreeViewItem),
                    Mouse.PreviewMouseDownEvent,
                           new MouseButtonEventHandler(OnMouseButtonDown), true);
}

So...Just捕获事件并重新发送。在这里,我将转发到它的父TreeView。

代码语言:javascript
复制
private static void OnMouseButtonDown(object sender, MouseButtonEventArgs e)
{
   var tvi = sender as TreeViewItem;
   var parentTree = tvi.GetParent<TreeView>();
   var eventArgs = new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, e.ChangedButton)
  {
      RoutedEvent = UIElement.MouseDownEvent,
      Source = sender
   };
   parentTree.RaiseEvent(eventArgs);
   e.Handled = false;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51927470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档