【问题标题】:WPF change window modal stateWPF改变窗口模式状态
【发布时间】:2015-02-11 09:27:40
【问题描述】:

是否可以在 WPF 中将窗口从模式更改为非模式?这意味着,我用...ShowDialog();打开窗口,但后来想切换状态(比如打开窗口...Show();

【问题讨论】:

  • 是你写的自定义Window吗?
  • 不,这是一个简单的 WPF 窗口。

标签: c# wpf dialog window


【解决方案1】:

假设您想将窗口从“主”窗口切换到非模态,您可以执行这样的操作,使 Window1 在 5 秒后变为非模态。

这种方法的缺点是对话框会闪烁。

private Window1 myWindow = new Window1();

private void MyButton_Click(object sender, RoutedEventArgs e)
{
    // Using a timer to simulate something happening 5 seconds later that would cause dialog state to change
    DispatcherTimer dispatcherTimer = new DispatcherTimer();
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
    dispatcherTimer.Interval = new TimeSpan(0, 0, 5);
    dispatcherTimer.Start();
    // The following line will block until you switch the dialog from modal to non-modal
    myWindow.ShowDialog();            
}

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    (sender as DispatcherTimer).Stop();
    myWindow.Hide();
    myWindow.Show();
}

如果您想将窗口从窗口本身切换到非模态窗口,则调用 Hide() 后跟 Show() 将完成相同的操作(再次闪烁)

private void SwitchToModelessButton_Click(object sender, RoutedEventArgs e)
{
    this.Hide();
    this.Show();
}

值得注意的是,当您进行此切换时,对 ShowDialog() 的“主”窗口调用将返回。

【讨论】:

  • 不,客户在模态窗口中请求一个Button,切换状态。但是this.Hide()this.Show() 应该也可以,我试试这个。
  • 啊,这就是为什么我问它是否是自定义窗口。
  • 好的,在我的简单演示中,这有效:private void Button_Click(object sender, RoutedEventArgs e) { TestWindow w = new TestWindow(); w.ShowDialog(); }。还有没有隐藏和显示的另一种解决方案?
  • 编辑了答案以包括从对话窗口代码中隐藏。如果不先隐藏窗口,我不知道任何其他方法,但如果有人提出替代方案,我很高兴被证明是错误的。这至少应该能达到你所需要的。
猜你喜欢
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多