2010-08-04 113 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