如何将主WPF窗口置于前面?

时间:2017-06-28 18:06:35

标签: wpf

如何最大化并将WPF主窗口置于桌面前端?我有一个监视目录的filewatcher。如果在目录中创建了一个新文件,我想将我的WPF应用程序主窗口带到dekstop的前面。如您所见,我在mainwidnow上尝试了几种方法。

修改后的代码:(我收到以下错误:“调用线程无法访问此对象,因为另一个线程拥有它”)

DispatcherOperation o =  Dispatcher.CurrentDispatcher.BeginInvoke(new 
Action(delegate
        {

            var win = System.Windows.Application.Current.MainWindow;
            win.Activate();
            win.WindowState = System.Windows.WindowState.Normal;
            win.Topmost = true;
            win.Focus();


        }), System.Windows.Threading.DispatcherPriority.ContextIdle, null);

        Debug.WriteLine("Invoke");

        o.Wait();

修改2(尝试获取主窗口的调度程序。我仍然得到“”调用线程无法访问此对象,因为另一个线程拥有它“。

 System.Windows.Application.Current.MainWindow.Dispatcher.Invoke(() =>
    {
        var win = System.Windows.Application.Current.MainWindow;
        win.Activate();
        win.WindowState = System.Windows.WindowState.Normal;
        win.Topmost = true;
        win.Focus();
    }, DispatcherPriority.Normal);

更新(工作) 我想我并没有用上面的例子把调度员叫到主窗口。我最终在窗口类中创建了一个名为_mainWindow的变量,类型为MainWindow。在MainWindow构造函数中,我实例化了变量:     _mainwidow = this;

然后我在我使用FileWatcher的类的构造函数中传递_mainwindow变量。在这里,我可以访问_mainwindow变量的调度程序:

        _mainWindow.Dispatcher.Invoke(() =>
        {
            var win = System.Windows.Application.Current.MainWindow;
            win.Activate();
            win.WindowState = System.Windows.WindowState.Normal;
            win.Topmost = true;
            win.Focus();
        }, DispatcherPriority.Normal);

1 个答案:

答案 0 :(得分:1)

试试此代码

 Dispatcher.Invoke(() =>
            {
                this.Activate();
                this.WindowState = System.Windows.WindowState.Normal;
                this.Topmost = true;
                this.Focus(); 
            });