2010-08-04 9 views
22

Perché il controllo del bordo WPF non ha un evento con il mouse aperto? Ho un ItemsControl con alcune cose di layout in esso per un DataTemplate. Voglio gestire l'evento doppio clic per far apparire una finestra di dialogo dei dettagli, ma il bordo, il mio contenitore di layout, non sembra esporre l'evento.Perché il controllo del bordo WPF non ha un evento di apertura rapida?

Qualche suggerimento su come ottenere l'evento doppio clic o rielaborare xaml per renderlo possibile?

risposta

6

Aggiornamento: Siamo spiacenti, il mio male - ora tarda

Dentro il pulsante del mouse evento get ClickCount

// e.Handled = true; optional 

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

Stackpanel non ha nemmeno un evento doppio clic. cosa stai suggerendo che io faccia con esso? –

+0

sry ho aggiornato il post –

15

MouseDoubleClick è dichiarato per il controllo in modo basta un esempio di un certo controllo nella vostra ItemTemplate. La cosa più semplice da fare è usare la classe Control di base che non ha altri comportamenti e dargli un modello personalizzato con ciò che è nel tuo ItemTemplate ora.

<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

Molto bello - ha funzionato come un fascino per me! – cordialgerm

+0

Puoi anche usare 'ContentControl' e specificare il contenuto al posto di un modello. –

35

Utilizzare solo InputBindings.

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

In generale; evitare l'uso di eventi se non si stanno sviluppando controlli in WPF. Solitamente l'uso del codice dietro eventi basati è una forte indicazione per un'interruzione Pattern MVVM.

+2

Raramente ho trovato la risposta perfetta alla mia domanda così rapidamente su StackOverflow – NielW

+1

Soluzione elegante. Meglio di definire il proprio comportamento di doppio clic. – jHilscher

Problemi correlati