Как запустить событие нажатия кнопки в коде позади в пользовательском контроле? - PullRequest
5 голосов
/ 27 августа 2010

возможно ли инициировать событие нажатия кнопки в коде позади в пользовательском управлении?

1 Ответ

5 голосов
/ 27 августа 2010

В C # события могут вызываться только из класса, который их объявляет.В случае с Button есть метод OnClick, который вызывает ClickEvent, но он защищен.Поэтому вам нужно объявить класс, который наследуется от Button, и изменить видимость метода OnClick (или объявить некоторый метод over, который вызывает base.OnClick)

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

Пример XAML

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

И код позади:

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

Хотя всегда проще вызывать обработчик событий напрямую.

HandleClick(this,null)

Тогда больше не понадобится дополнительная сантехника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...