0

特定の条件に基づいて、他のすべてのウィンドウの前にポップアップする必要がある wpf アプリケーションがあります。私はMVVMに準拠した方法でこれを達成しようとしています。多くの調査の結果、最良の解決策は、ウィンドウのアクティブ化イベントとインターフェイスの動作を使用することです。mvvm activateで見つかった2番目のソリューションを使用して、アクティブ化機能を機能させることができました。ただし、クイックスタートガイドに基づいて、Mahapp Metro コントロール「MetroWindow」を使用して GUI のスタイルを設定すると、 、GUIが台無しになります。XAML インタラクション動作セクションが追加されるたびに、GUI の元の Window オブジェクトが表示され、2 つのタイトル バーが表示されます (1 つは Window から、もう 1 つは 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 に答える