如何闪烁一个 WPF 窗口?

22 浏览
0 Comments

如何闪烁一个 WPF 窗口?

如果我有一个Xaml窗口,如何将其作为子窗口打开,并在父窗口继续执行之前等待子窗口关闭?

0
0 Comments

问题的出现原因是因为在WPF中展示窗口的方法有两种:Window.Show和Window.ShowDialog。其中,Window.Show是非阻塞的,调用该方法后程序会继续执行;而Window.ShowDialog是阻塞的,调用该方法后会阻塞线程并显示对话框,同时阻塞与父窗口的交互。当对话框被关闭后,ShowDialog将返回给调用者,并允许访问DialogResult(如果需要的话)。

解决方法是使用非阻塞的Window.Show方法来展示窗口,这样可以避免阻塞程序的执行。如果弹出的对话框只是警告信息,不需要阻塞程序的执行,可以使用Window.Show方法来展示对话框。

以下是具体示例代码:

// 创建窗口对象
Window myWindow = new MyWindow();
// 使用非阻塞的方式展示窗口
myWindow.Show();
// 继续执行其他代码
// ...

通过使用Window.Show方法来展示窗口,程序将会在展示窗口后继续执行后续的代码,不会被阻塞。这样就可以避免阻塞程序的执行,同时展示警告信息的对话框。

希望以上解决方法对您有帮助!

0
0 Comments

如何在WPF窗口中闪烁?

问题的出现原因:对于初学者来说,很多答案都过于简单化,他们可能不了解所有的“内部细节”,因为WPF比仅仅告诉某人“使用 .ShowDialog()!”要复杂得多。但是这就是你想要使用的方法(而不是 .Show()),它可以阻止使用底层窗口,并在模态窗口关闭之前阻止代码继续执行。

解决方法:首先,你需要两个WPF窗口(一个调用另一个)。

在第一个窗口中(假设名称为MainWindow.xaml),在它的代码后台中添加以下内容:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

然后在XAML中添加一个按钮:

右键单击 Click 事件处理程序,选择“转到定义”。它将在MainWindow.xaml.cs中为你创建该处理程序:

private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}

在这个函数中,你需要使用它的页面类来指定另一个页面。假设你将那个页面命名为 "ModalWindow",那么它就变成了它的页面类,并且是你实例化(调用)它的方式:

private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
    ModalWindow modalWindow = new ModalWindow();
    modalWindow.ShowDialog();
}

假设你有一个需要在模态对话框中设置的值。在 ModalWindow 的XAML中创建一个文本框和一个按钮:


    
    

然后再次创建一个事件处理程序(另一个 Click 事件),并使用它将文本框的值保存到 ModalWindow 上的一个公共静态变量中,并调用 this.Close()

public partial class ModalWindow : Window
{
    public static string myValue = String.Empty;        
    public ModalWindow()
    {
        InitializeComponent();
    }
    private void btnSaveData_Click(object sender, RoutedEventArgs e)
    {
        myValue = txtSomeBox.Text;
        this.Close();
    }
}

然后,在 .ShowDialog() 语句之后,你可以获取该值并使用它:

private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
    ModalWindow modalWindow = new ModalWindow();
    modalWindow.ShowDialog();
    string valueFromModalTextBox = ModalWindow.myValue;
}

通过以上步骤,你可以在WPF窗口中闪烁。

0
0 Comments

问题的原因是没有正确地显示WPF窗口并设置所有者属性,导致在使用Alt+Tab等操作时出现奇怪的行为。

解决方法是使用ShowDialog方法来显示窗口,并设置Owner属性为主窗口。下面是解决方法的具体代码:

YourWindow window = new YourWindow();

window.Owner = Application.Current.MainWindow;

window.ShowDialog();

通过以上代码,可以正确地显示WPF窗口并设置所有者属性,避免在使用Alt+Tab等操作时出现奇怪的行为。

0