0

我有一个 wpf 应用程序,需要根据某些条件在所有其他窗口的前面弹出。我正在尝试以符合 MVVM 的方式完成此操作。经过大量研究,最好的解决方案是使用窗口的激活事件和界面的行为。使用mvvm activate上的第二种解决方案,我能够使激活功能正常工作。但是,一旦我根据 快速入门指南使用 Mahapp Metro 控件“MetroWindow”设置我的 GUI 样式,GUI 搞砸了。每当添加 XAML 交互行为部分时,GUI 的原始 Window 对象就会出现,从而产生 2 个标题栏(一个来自 Window,另一个来自 MetroWindow)。我尝试使用 Metro 样式设计自己的窗口,但到目前为止无法实现 Metro 标题栏(找不到任何指南或文档)。Visual Studio 还不断抱怨“对象引用未设置为对象的实例”(有时在

<controls:MetroWindow
...

和其他时间

<i:Interaction.Behaviors>
    <Behaviors:ActivateBehavior ...

但应用程序运行。

如何保持 Mahapps Metro 样式(包括标题栏样式)并按照我的业务逻辑以符合 MVVM 的方式使窗口显示在前面?

4

1 回答 1

0

这不是你问题本质的答案,但也许你可以使用这样的东西来激活一个窗口:

using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;    
using GalaSoft.MvvmLight.Messaging;

// View

public partial class TestActivateWindow : Window
{
    public TestActivateWindow() {
        InitializeComponent();
        Messenger.Default.Register<ActivateWindowMsg>(this, (msg) => Activate());
    }
}

// View Model

public class ActivateWindowMsg
{
}

public class MainViewModel: ViewModelBase
{
    ICommand _activateChildWindowCommand;

    public ICommand ActivateChildWindowCommand {
        get {
            return _activateChildWindowCommand?? (_activateChildWindowCommand = new RelayCommand(() => {
                Messenger.Default.Send(new ActivateWindowMsg());
        }));
        }
    }
}
于 2014-08-08T19:22:04.617 回答