WPF在运行时更改用户控件中的按钮内容



我有一个按钮用户控件。我想改变按钮内容,同时执行用户单击事件。我试试这个:

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!";
}

最新更新