2009-08-17 19 views
5

Jak utworzyć zdarzenie, które obsłużyło zdarzenie kliknięcia jednej z pozostałych formantów z niestandardowego formantu?Sterowanie niestandardowe Silverlight Utwórz niestandardowe zdarzenie

Oto konfiguracja co mam: pole tekstowe i przycisk (Custom Control) aplikacji Silverlight (używa tego powyżej kontroli niestandardowych)

chciałbym narazić zdarzenie kliknięcia z niestandardowego sterowania na głównej aplikacji, jak to zrobić?

Dzięki

+0

Czy Twoje własne sterowanie jest formantem użytkownika (wywodzącym się z UserControl), czy prawdziwym sterowaniem? Powinieneś być w stanie ujawnić publiczne wydarzenie w kodzie znajdującym się za plikiem i dołączyć do zdarzeń kontrolek podrzędnych, aby wydobyć wydarzenie. –

+0

Są to 2 prawdziwe kontrole połączone w 1, i chcę tylko ujawnić zdarzenie kliknięcia przycisku. Mogę dostać się do zdarzenia kliknięcia, gdy pracuję nad formantem użytkownika, ale jeśli pracuję nad czymś zużywającym kontrolę użytkownika, nie dojdę do tego programu obsługi zdarzeń. – PlayKid

Odpowiedz

8

Oto bardzo prosta wersja, ponieważ nie używam właściwości zależność lub cokolwiek. Ujawni to właściwość Click. Zakłada to, że nazwa części szablonu przycisku to "Przycisk".

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); 
      } 
     } 
    } 
} 
Powiązane problemy