我有一个按钮用户控件。我想改变按钮内容,同时执行用户单击事件。我试试这个:
public static readonly RoutedEvent ClickProperty = EventManager.RegisterRoutedEvent(
nameof(Click), RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ButtonProgress));
private async void btnButton_Click(object sender, RoutedEventArgs e)
{
btnButton.Content= "Please Wait...";
ExecuteClickEvent(); // Run User Click Event
btnButton.Content= "Its Done!";
}
//User click Event
public event RoutedEventHandler Click
{
add { AddHandler(ClickProperty, value); }
remove { RemoveHandler(ClickProperty, value); }
}
private void ExecuteClickEvent()
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(ButtonProgress.ClickProperty);
RaiseEvent(newEventArgs);
}
,但它不能正常工作。当我删除btnButton。内容= "完成了!"按钮内容将设置"Please wait…">,但是当我把btnButton。内容= "完成了!"按钮的内容是"its done!"从来没有过。
如果ExecuteClickEvent()
正在dispatcher线程上执行,你可以在调用Task.Delay
之前调用它,让UI线程有机会更新按钮的内容:
private async void btnButton_Click(object sender, RoutedEventArgs e)
{
btnButton.Content = "Please Wait...";
await Task.Delay(1);
ExecuteClickEvent(); // Run User Click Event
btnButton.Content = "Its Done!";
}