我有一个wpf应用程序需要根据特定条件在所有其他窗口中弹出。我试图以符合MVVM的方式完成此任务。经过大量研究,最佳解决方案是使用窗口的激活事件和界面行为。我能够使用mvvm activate上的第二个解决方案使激活功能正常工作。然而,一旦我使用Mahapp Metro控件" MetroWindow"基于quickstart guide,GUI会混乱。每当添加XAML交互行为部分时,就会出现GUI的原始Window对象,从而产生2个标题栏(一个来自Window,另一个来自MetroWindow)。我尝试使用Metro样式设计我自己的窗口,但到目前为止无法实现Metro标题栏(无法找到任何指南或文档)。 Visual Studio也一直在抱怨"对象引用未设置为对象的实例" (有时在
<controls:MetroWindow
...
和其他时间
<i:Interaction.Behaviors>
<Behaviors:ActivateBehavior ...
然后应用程序运行。
如何保持Mahapps Metro样式(包括标题栏样式)并使窗口显示在前面,由我的业务逻辑以符合MVVM的方式确定?
答案 0 :(得分: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());
}));
}
}
}