2010-07-23 24 views
8

Qualcuno sa perché non riesco a impostare un evento su un modello di controllo ??WPF - Eventi su un ControlTemplate?

Ad esempio, la seguente riga di codice non verrà compilata. Lo fa con qualsiasi evento in un modello di controllo.

<ControlTemplate x:Key="DefaultTemplate" TargetType="ContentControl"> 
    <StackPanel Loaded="StackPanel_Loaded"> 

    </StackPanel> 
</ControlTemplate> 

Sto usando un modello di progettazione MVVM ed il controllo qui si trova in un ResourceDictionary che viene aggiunto al MergedDictionaries dell'applicazione.

+0

Per chiunque abbia la stessa domanda, sto usando uno Style e EventSetter come alternativa, anche se mi piacerebbe comunque sapere perché non posso imposta l'Evento direttamente sul controllo se sto usando un ControlTemplate. – Rachel

risposta

11

Qualcuno sa perché non riesco a impostare un evento su un modello di controllo ??

In realtà, è possibile ... Ma dove ti aspetteresti che il gestore di eventi sia definito? Lo ResourceDictionary non ha code-behind, quindi non c'è spazio per inserire il codice del gestore di eventi. È possibile, tuttavia, creare una classe per il vostro dizionario risorse, e associarlo con l'attributo x:Class:

<ResourceDictionary x:Class="MyNamespace.MyClass" 
        xmlns=...> 

    <ControlTemplate x:Key="DefaultTemplate" TargetType="ContentControl"> 
     <StackPanel Loaded="StackPanel_Loaded"> 

     </StackPanel> 
    </ControlTemplate> 

codice C#:

namespace MyNamespace 
{ 
    public partial class MyClass : ResourceDictionary 
    { 
     void StackPanel_Loaded(object sender, RoutedEventArgs e) 
     { 
      ... 
     } 
    } 
} 

(potrebbe anche essere necessario per modificare l'azione build del dizionario delle risorse a "Pagina", non ricordo esattamente ...)

+0

Questo è ciò che attualmente ho ... Una classe per il ResourceDictionary con la sua azione Build impostata su Page. L'unica differenza che posso vedere è che non l'ho dichiarata pubblica, ma il cambiamento non mi è stato di alcun aiuto. – Rachel

+0

E qual è il problema esattamente? Hai ricevuto un messaggio di errore ? –

+0

Quando lancio il programma, lancia una NullReferenceException (compila bene). Deve avere qualcosa a che fare con il mio schema di progettazione perché ho provato a creare un semplice test case e funziona correttamente. La mia app principale sovrascrive OnStartup di app.xaml per caricare un sacco di diversi ResourceDictionaries, crea un'istanza di MainWindow, imposta DataContext, quindi chiama MainWindow.Show() - L'ultima riga è dove sto ottenendo l'eccezione. Spostare l'evento da ControlTemplate a EventSetter elimina l'errore. – Rachel

Problemi correlati