我的主窗口有几个按钮。我希望打开其他窗口的那些在执行之前禁用主窗口并在之后启用。除了写这个之外,有没有不同的方法来实现这个目标:
private void button_Click(object sender, RoutedEventArgs e)
{
this.IsEnabled = false;
Some code...();
this.IsEnabled = true;
}
在每种方法?
您可以创建一个方法来运行您的代码:
private void DisableAndExecute(Action action)
{
this.IsEnabled = false;
action();
this.IsEnabled = true;
}
private void button_Click(object sender, RoutedEventArgs e)
{
DisableAndExecute(() =>
{
Some code...();
});
}
这只是意味着您的禁用和重新启用都在一个地方完成。
您还可以在打开表单时尝试使用ShowModal而不是Show:
form2.ShowModal();
如果您不介意手动添加事件处理程序,则可以执行以下操作:
public MainWindow()
{
InitializeComponent();
btn.Click += Wrap(Button_Click);
}
public RoutedEventHandler Wrap(RoutedEventHandler handler)
{
return (sender, e) =>
{
try
{
this.IsEnabled = true;
handler(sender, e);
}
finally
{
this.IsEnabled = false;
}
};
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// Code
}
您可以向窗口添加父子关系,这样您就不必禁用窗口,子窗口将始终位于所有者之上,直到关闭为止。像这样:
SomeWindow childWindow = new SomeWindow();
childWindow.Owner = this;
childWindow.Show();