0

WPF を使用して WinForms アプリケーションを再設計しています。プロジェクトに参加してわずか 2 週間で、必要なコントロールの多くがカスタム コントロールを必要とすることをすぐに知りましたが、WPF ではこれらを簡単に設計できます。

これまでのところ、MainWindow.xaml、Login.xaml、Menu.xaml があります。

アイデアは、ログインを表示し、確認時にメニューを表示し、それが閉じてメインウィンドウ内のログインに戻り、フルスクリーンになることです。

機能を動作させるために、単に WindowStyle="none" でログイン フォームとメニュー フォームを作成し、それを画面の中央に配置しました。フォームはまだあるがメイン フォームにリンクされていないため、これは明らかに機能しません。

winform では MDI を使用しましたが、このフォーラムを読んで、MDI が嫌われている質問を見て、タブ コントロールを見ました。これまでのところ、1つのフォームを使用して表示するチュートリアルを見つけることができますが、ログイン>メニュー>ログインに移動するための適切なチュートリアルを見つけることができません

このプロジェクトは、WPF を理解するための単なる練習プロジェクトですが、この件に関しては多くの質問があり、誰もが異なる方法で処理しています。

ありがとう

4

2 に答える 2

2

過度に複雑な回答を作成せず、DelegateCommand (s) やWindowManager (s) などの明らかに新しい概念を含めずに、これは多くの異なる「サブ ウィンドウ」を表示するフルスクリーン アプリケーションの基本的な例です ( Windows 自体ではなく、むしろ UserControls)

メインウィンドウ:

<Window x:Class="FullScreenAppSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowState="Maximized"
        WindowStyle="None">
</Window>

コードビハインド:

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

    private void ShowLogin()
    {
        var loginview = new LoginView();
        this.Content = loginview;
    }

    private void ShowMenu()
    {
        var menu = new MenuView();
        this.Content = menu;
    }
}

ログインビュー:

<UserControl x:Class="FullScreenAppSample.Login.LoginView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <!-- your login screen UI here -->
</UserControl>

メニュービュー:

<UserControl x:Class="FullScreenAppSample.Menu.MenuView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <!-- your Menu UI here -->
</UserControl>

これは、「ビュー ファースト」アプローチと呼ばれるものであり、ビューが他のビューをインスタンス化し、それらを可視化する責任を負うことによって、アプリケーションの「フロー」を指示します。


そうは言っても、私はあなたの主張に対処するために少し時間を割きます

誰もが異なる方法でそれを処理します

はい。WPF アプリケーションを作成するための主流のアプローチは、 Martin Fowler の Presentation Model のWPF 固有バージョンとして考えられたMVVMと呼ばれるものです。ただし、 MVVM LightCaliburn.Micro、Microsoft のPrismなどの多くのMVVM Frameworksとともに、MVVM には多くの解釈とさまざまなバージョンが存在します(他にも多数あります)。

これらの各フレームワークは、大規模で複雑な WPF アプリケーションの開発を容易にするための基本的なツール (基本クラス、ヘルパー クラス、サービス、抽象化、イベント アグリゲーターなど) を提供します。

結論: View や ViewModel のインスタンス化 / WPF での管理などを処理する決定的な「正しい方法」はありません。これは、MVVM フレームワークの選択と、テスト容易性の必要性など、プロジェクトの詳細に依存します。

私は個人的に、いくつかの異なるフレームワークからさまざまなパーツとコンポーネント (および概念も) を取得し、独自の ViewModel ファースト MVVM アプローチを構成しました。時間をかけてプロジェクトの要件を分析し、これらのいずれかを使用するかどうかを検討することをお勧めします.

于 2013-09-30T03:42:06.767 に答える
0

「フォーム」と「ウィンドウ」の観点から考えるのではなく、このアプリケーションを Web アプリケーションであるかのように設計する方法を考えてください。ログイン「画面」は、他のすべての上に配置されたユーザーコントロールであり、表示中にユーザーが下のコントロールと対話するのを防ぎます。

また、相互にコントロールを直接参照しないでください。代わりに、各ユーザー コントロールにイベントを追加し、MainWindow の他のコントロールの適切なメソッドにバインドします。

于 2013-09-30T02:38:41.430 に答える