【问题标题】:Capture Click on TreeView Item捕获单击 TreeView 项
【发布时间】:2011-09-22 10:42:22
【问题描述】:

有没有办法显式捕获对 TreeView 项目的点击?

目前,我所处的位置是电视代表用户的一种选项菜单。通常,我只会在电视上使用 SelectedItemChanged 事件,但用户可能会连续两次重新单击一个项目,这不会引发此事件。我考虑了在包含每个节点中的项目的堆栈面板上放置一个事件侦听器的想法,但问题是该事件在节点上的选定项目更改之前触发。因此,如果您点击堆栈面板,您将获得该事件,但无法获得关联的项目。关于如何摆脱这个问题的任何想法?

【问题讨论】:

    标签: silverlight events treeview selecteditem


    【解决方案1】:

    您可以为TreeView 处理MouseLeftButtonUp 事件。

    private void treeView1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        var selectedItem = treeView1.SelectedItem;
    }
    

    [编辑]

    您可以处理MouseLeftButtonDown,但此时SelectedItem 不会被更改。您可以做的是访问e.OriginalSource 以找出单击了哪个元素。我用<TreeViewItem /> 的树检查了下面的示例,所以元素是TextBlock。如果您尝试下面的代码,请根据您的场景更改类型转换。

    public MainPage()
    {
        InitializeComponent();
        treeView1.AddHandler(MouseLeftButtonDownEvent, new MouseButtonEventHandler(treeView1_MouseLeftButtonDown), true);
    }
    
    private void treeView1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var selectedElement = (TextBlock)e.OriginalSource;
    }
    

    【讨论】:

    • 如果我希望响应专门针对按下按钮的操作怎么办?我不希望 UX 出现令人讨厌的延迟。
    • @themaestro - 我可以展示你如何处理 MouseLeftButtonDown 事件,但你会遇到和现在一样的问题。原因是因为在MouseLeftButtonDown 事件之后,MouseLeftButtonUp 之前更改了选定项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2016-09-02
    • 1970-01-01
    • 2011-04-17
    • 2020-09-24
    相关资源
    最近更新 更多