2010-08-27 27 views

Respuesta

5

En C# los eventos solo se pueden invocar desde la clase que los declara. En el caso del botón, hay un método llamado OnClick que aumenta el evento ClickEvent pero está protegido. Así que hay que declarar la clase que hereda de botón y cambiar la visibilidad del método OnClick (o declarar algunos de más de método que llama base.OnClick)

public class MyButton : Button 
{ 
    public new void OnClick() 
    { 
     base.OnClick(); 
    } 
} 

Ejemplo de XAML

<StackPanel Background="White" > 
    <my:MyButton x:Name="TestButton" Click="HandleClick" Content="Test" /> 
    <TextBlock x:Name="Result" /> 
</StackPanel> 

Y código detrás:

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 
     new Timer(TimerCall,null,0,1000); 
    } 

    private void TimerCall(object state) 
    { 
     Dispatcher.BeginInvoke(()=>TestButton.OnClick()); 
    } 

    private void HandleClick(object sender, RoutedEventArgs e) 
    { 
     Result.Text = String.Format("Clicked on {0:HH:mm:ss}",DateTime.Now); 
    } 
} 

a pesar de que siempre es más fácil llamar directamente controlador de eventos.

HandleClick(this,null) 

Luego no habrá necesidad de tuberías adicionales.

+0

gracias. solución muy interesante. intentará. – KentZhou

Cuestiones relacionadas