2009-08-17 40 views
5

¿Cómo creo un evento que manejó un evento click de uno de mis otros controles desde mi control personalizado?Control personalizado de Silverlight Crear evento personalizado

Aquí está la configuración de lo que tengo: un cuadro de texto y un botón (control personalizado) una aplicación de Silverlight (utiliza que por encima de control personalizado)

me gustaría exponer el evento click del botón desde el control personalizado en la aplicación principal, ¿cómo hago eso?

Gracias

+0

¿Su control personalizado es un control de usuario (se deriva de UserControl), o un control verdadero? Debería poder exponer un evento público en el código detrás del archivo y adjuntarlo a los eventos de los controles de su hijo para mostrar el evento. –

+0

Son 2 controles verdaderos combinados en 1, y solo quiero exponer el evento click del botón. Puedo acceder al evento click cuando estoy trabajando en el control del usuario, pero si estoy trabajando en algo que consuma el control del usuario, no llegaré a ese controlador de eventos. – PlayKid

Respuesta

8

Aquí hay una versión muy sencilla, ya que no estoy usando las propiedades de dependencia o nada. Expondrá la propiedad Click. Esto supone que el nombre de la parte de la plantilla del botón es "Botón".

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); 
      } 
     } 
    } 
} 
Cuestiones relacionadas