C# WPF更改窗口模式状态
在WPF中,是否可以将窗口从模态更改为非模态?也就是说,我用C# WPF更改窗口模式状态,c#,wpf,dialog,window,C#,Wpf,Dialog,Window,在WPF中,是否可以将窗口从模态更改为非模态?也就是说,我用…ShowDialog()打开窗口,但稍后要切换状态(如打开窗口…Show();假设要从“主”窗口将窗口切换到非模态,则可以执行类似操作,使Window1在5秒后变为非模态 这种方法的缺点是对话框会闪烁 private Window1 myWindow = new Window1(); private void MyButton_Click(object sender, RoutedEventArgs e) { // Usin
…ShowDialog()打开窗口
,但稍后要切换状态(如打开窗口…Show();
假设要从“主”窗口将窗口切换到非模态,则可以执行类似操作,使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()将完成相同的操作(同样是闪烁)
值得注意的是,当您进行此切换时,对ShowDialog()的“主”窗口调用将返回。这是您编写的自定义窗口吗?否,这是一个简单的WPF窗口。否,客户请求模式窗口中的一个按钮,切换状态。但是
this.Hide()
而不是this.Show()
也应该可以,我尝试了这个。啊,这就是为什么我问它是否是一个自定义窗口。好的,在我的简单演示中,这是有效的:私有无效按钮(object sender,RoutedEventArgs e){TestWindow w=new TestWindow();w.ShowDialog();}
。还有没有不隐藏和显示的解决方案?编辑了答案,将隐藏对话框窗口的代码包括在内。我不知道没有先隐藏窗口的其他方法,但如果有人提出替代方案,我很高兴被证明是错误的。这至少应能达到您的需要。
private void SwitchToModelessButton_Click(object sender, RoutedEventArgs e)
{
this.Hide();
this.Show();
}