2010-08-27 4 views

Répondre

5

Les événements C# ne peuvent être invoqués que dans la classe qui les déclare. Dans le cas du bouton il y a une méthode appelée OnClick qui soulève le ClickEvent mais il est protégé. Donc, vous devez déclarer classe qui hérite de Button et changer la visibilité de la méthode OnClick (ou déclarer une méthode qui appelle sur base.OnClick)

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

Exemple de XAML

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

et le code derrière:

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

Bien qu'il soit toujours plus facile d'appeler un gestionnaire d'événements directement.

HandleClick(this,null) 

Ensuite, il n'y aura pas besoin de plomberie supplémentaire.

+0

merci. solution très intéressante. j'essaierai. – KentZhou

Questions connexes