2009-08-17 12 views
5

Come si crea un evento che gestiva un evento click di uno dei miei altri controlli dal mio controllo personalizzato?Silverlight Custom Control Crea evento personalizzato

Ecco la messa a punto di quello che ho ottenuto: una casella di testo e un pulsante (controllo personalizzato) un'applicazione Silverlight (utilizza tale sopra controllo personalizzato)

vorrei esporre l'evento click del pulsante dal controllo personalizzato sull'applicazione principale, come posso farlo?

Grazie

+0

Il controllo personalizzato è un controllo utente (derivato da UserControl) o un controllo vero? Dovresti essere in grado di esporre un evento pubblico nel codice che si trova dietro il file e collegarlo agli eventi dei controlli figlio per far emergere l'evento. –

+0

Sono 2 controlli veri combinati in 1 e voglio solo mostrare l'evento click del pulsante. Posso accedere all'evento click quando sto lavorando al controllo utente, ma se sto lavorando su qualcosa che consuma il controllo utente, non arriverò a quel gestore eventi. – PlayKid

risposta

8

Ecco una versione super semplice, dal momento che non sto usando proprietà di dipendenza o altro. Esporterà la proprietà Click. Ciò presuppone che il nome della parte del modello di pulsante sia "Pulsante".

using System.Windows; 
using System.Windows.Controls; 

namespace SilverlightClassLibrary1 
{ 
    [TemplatePart(Name = ButtonName , Type = typeof(Button))] 
    public class TemplatedControl1 : Control 
    { 
     private const string ButtonName = "Button"; 

     public TemplatedControl1() 
     { 
      DefaultStyleKey = typeof(TemplatedControl1); 
     } 

     private Button _button; 

     public event RoutedEventHandler Click; 

     public override void OnApplyTemplate() 
     { 
      base.OnApplyTemplate(); 

      // Detach during re-templating 
      if (_button != null) 
      { 
       _button.Click -= OnButtonTemplatePartClick; 
      } 

      _button = GetTemplateChild(ButtonName) as Button; 

      // Attach to the Click event 
      if (_button != null) 
      { 
       _button.Click += OnButtonTemplatePartClick; 
      } 
     } 

     private void OnButtonTemplatePartClick(object sender, RoutedEventArgs e) 
     { 
      RoutedEventHandler handler = Click; 
      if (handler != null) 
      { 
       // Consider: do you want to actually bubble up the original 
       // Button template part as the "sender", or do you want to send 
       // a reference to yourself (probably more appropriate for a 
       // control) 
       handler(this, e); 
      } 
     } 
    } 
} 
Problemi correlati