2010-08-04 158 views
22

为什么WPF边框控件没有mousedoubleclick事件?我有一个ItemsControl与一些DataTemplate中的布局东西。我想处理双击事件以弹出详细信息对话框,但是我的布局容器边框看起来并不显示该事件。为什么WPF边框控件没有mousedoubleclick事件?

有关如何获得双击事件或重做xaml使其成为可能的任何建议?

回答

6

更新:对不起,是我不好 - 时至今日

内,您的鼠标按钮按下事件得到ClickCount的

// e.Handled = true; optional 

if (e.ClickCount > 1) 
{ 
    // here comes double click and more :) 
} 
+0

Stackpanel没有双击事件。你在暗示我用它做什么? – 2010-08-05 01:29:28

+0

sry我更新了帖子 – 2010-08-05 01:53:35

15

MouseDoubleClick是在控制宣告,所以你只是在你的ItemTemplate需要一些控制的一个实例。最简单的做法是使用基本的Control类,它没有任何其他行为,只需给它一个自定义模板,就可以使用您的ItemTemplate中的内容。

<ItemsControl> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Control MouseDoubleClick="Control_MouseDoubleClick"> 
       <Control.Template> 
        <ControlTemplate> 
         <Border> 
          <!--Other ItemTemplate stuff--> 
         </Border> 
        </ControlTemplate> 
       </Control.Template> 
      </Control> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

非常好 - 为我工作就像一个魅力! – cordialgerm 2012-05-23 22:57:22

+0

您也可以使用“ContentControl”并指定内容而不是模板。 – 2016-12-29 19:42:44

35

只要使用InputBindings。

<Border> 
    <Border.InputBindings> 
     <MouseBinding MouseAction="LeftDoubleClick" Command="..."/> 
    </Border.InputBindings> 
</Border> 

一般而言;如果不在WPF中开发控件,请避免使用事件。通常,基于事件的代码的使用是MVVM模式中断的强烈指示。

+2

很少遇到我的问题的完美答案如此迅速在stackoverflow – NielW 2014-12-10 18:58:31

+1

优雅的解决方案。比定义自己的双击行为更好。 – jHilscher 2016-01-21 07:44:49