Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF更改窗口模式状态_C#_Wpf_Dialog_Window - Fatal编程技术网

C# 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

在WPF中,是否可以将窗口从模态更改为非模态?也就是说,我用
…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();
}