2010-08-04 10 views
22

Warum hat die WPF-Rahmensteuerung kein mousedoubleclick-Ereignis? Ich habe ein ItemsControl mit etwas Layout-Zeug für ein DataTemplate. Ich möchte das Doppelklickereignis behandeln, um einen Detaildialog zu öffnen, aber der Rahmen, mein Layoutcontainer, scheint das Ereignis nicht anzuzeigen.Warum hat die WPF-Rahmensteuerung kein mousedoubleclick-Ereignis?

Irgendwelche Vorschläge, wie man entweder auf das Doppelklickereignis kommt, oder den XAML neu bearbeitet, um es möglich zu machen?

Antwort

6

Update: Sorry, meine schlechte - vorgerückte Stunde

In Ihrer Maustaste Ereignis bekommen Clickcount

// e.Handled = true; optional 

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

Stackpanel hat auch kein Doppelklickereignis. Was schlägst du damit vor? –

+0

sry Ich habe den Beitrag aktualisiert –

15

Mousedoubleclick zur Kontrolle erklärt werden, so dass Sie nur eine Instanz einer Kontrolle in Ihrem ItemTemplate benötigen. Am einfachsten ist es, die Basis-Control-Klasse zu verwenden, die kein anderes Verhalten hat. Geben Sie ihr einfach eine benutzerdefinierte Vorlage mit dem, was sich jetzt in Ihrem ItemTemplate befindet.

<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

Sehr schön - arbeitete wie ein Charme für mich! – cordialgerm

+0

Sie können auch 'ContentControl' verwenden und Inhalt anstelle einer Vorlage angeben. –

35

Verwenden Sie einfach InputBindings.

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

Im Allgemeinen; Vermeiden Sie die Verwendung von Ereignissen, wenn Sie keine Steuerelemente in WPF entwickeln. Normalerweise ist die Verwendung von Code hinter Basisevents ein starker Hinweis auf einen MVVM Pattern-Break.

+2

Selten finde ich die schnelle Antwort auf meine Frage so schnell auf stackoverflow – NielW

+1

Elegante Lösung. Besser als das eigene Doppelklickverhalten zu definieren. – jHilscher