当前位置:  开发笔记 > 程序员 > 正文

WPF ListBoxItem双击?

如何解决《WPFListBoxItem双击?》经验,为你挑选了4个好方法。

WPF ListBox没有DoubleClick事件,至少没有我能说的那么多.是否有针对此问题的解决方法,让我双击项目以让事件处理程序对其执行某些操作?谢谢你的帮助.



1> David Veenem..:

事实证明,ListBox有一个MouseDoubleClick事件.我将此事件添加到我的ListBox并让事件处理程序处理我的任务,将所选项目复制到另一个ListBox.所以,现在每当我双击某个项目时,它就会被复制.


应该注意的是,当鼠标在控件内的任何位置双击时,会触发`ListBox.MouseDoubleClicked`事件.IE:这包括不在任何`ListBoxItem`上的双击.
甚至双击滚动条时会触发
@Marlos:不.如果单击列表框中的空白区域,则最后选择的项目将保持选中状态.

2> marapet..:

可以将带有参数的命令绑定到ListBoxItems而不使用代码隐藏附加行为,只需使用InputBindingsa MouseBinding,如本答案中所示.

例如ListBoxMouseBindingLeftDoubleClick:


    
        
            
                
                    
                
            
         
    

如果该命令是在相同的DataContext作为限定ItemsSourceListBox,它可以通过使用结合RelativeSource作为包括在例如结合.


这是最好的解决方案.我尝试过EventToCommand之前没有用.InputBindings工作得很好.我在listbox datatemplate中的StackPanel上使用它们.
给这个开发者一些比特币!

3> gls123..:

如果您正在使用数据绑定,那么这个问题很容易解决


    
        
    
    

然后在你的代码后面,检查双击如下

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ClickCount>=2)
    { 
        ....
    }
}

如果在双击之前未选中双击项目,则在事件处理程序中不会显示它.您在该处理程序中的逻辑需要记住这一点


请注意,在此解决方案中,如果单击ListBoxItem但在文本块之外(如果是填充/边距),则不会触发该事件.这可能是也可能不是所希望的.

4> Ben Von Hand..:

您始终可以覆盖ListItem控件模板并处理模板内的双击事件,例如在包含ListBox的常规内容的不可见边框中.

本文介绍如何将ControlTemplate与ListBoxItem一起使用.除此之外,只需将处理程序添加到控件模板的最外层元素即可.

如果您有Expression Blend,则可以使用它来提取现有的控件模板以供您修改,这样您就不必做太多工作来确保新列表框的行为与旧列表框相同.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有