我的主窗口有几个按钮。我希望打开其他窗口的那些在执行之前禁用主窗口并在之后启用。除了写这个之外,还有不同的方法来实现这个目标:
private void button_Click(object sender, RoutedEventArgs e)
{
this.IsEnabled = false;
Some code...();
this.IsEnabled = true;
}
在每种方法中?
答案 0 :(得分:0)
您可以通过以下方式创建一个运行代码的方法:
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();
答案 1 :(得分:0)
如果您不介意手动添加事件处理程序,则可以执行以下操作:
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
}
答案 2 :(得分:0)
您可以向窗口添加父子关系,这样您就不必禁用窗口,子窗口将始终位于所有者之上,直到关闭为止。像这样:
SomeWindow childWindow = new SomeWindow();
childWindow.Owner = this;
childWindow.Show();