3

私のアプリケーションには3つのページがあります(1つのメインウィンドウと2つのページで簡単な選択が行われます)。

現在、次のナビゲーション構造を使用して、ページhttp://azerdark.wordpress.com/2010/04/23/multi-page-application-in-wpf/を切り替えています。基本的に、インターフェースを使用してページの参照を渡し、新しいインスタンスを作成します。

アイデアは、一度に1つのウィンドウしか開くことができないということです。たとえば、ページAからBに移動すると、BがAのコンテンツを置き換えます。順序は常にA-> B-> C-> A(メインウィンドウに戻る)またはA->B->Aです。

つまり、すべてのコンテンツが常に1つのウィンドウに表示されます。私の現在の解決策では、ページが切り替わるたびにページの新しいインスタンスをインスタンス化するという問題があります(たとえば、A-> B-> Aには結果として2xの新しいPageA()があります。

これにより、私が本当に好きではない多くの静的メソッドとクラスを使用する必要が生じます。

現在のアプリケーションナビゲーション構造の全体的なオーバーホールを必要としない、これに対するより良い解決策はありますか?

現在のソリューションでは、静的なObversableCollectionリストを使用して、動的に作成される多数のコントロールを記憶しているため、ページA(mainWindow)に戻ってもすべてが同じままです。

前もって感謝します。

4

2 に答える 2

7

なぜこんなにシンプルな設定(3ページと固定ナビゲーション構造)でナビゲーションを使うのかよくわかりません。はるかに簡単な方法は次のとおりです。

  1. MainWindowをコンテンツプレースホルダーとして使用する
  2. ユーザーコントロールをページとして作成する
  3. 個別のプロパティでページを保持する静的クラスを定義します。必要に応じてそれらを初期化します(シングルトンインスタンス)。
  4. MainWindow.SetPage(Pages.First)を使用してページを変更します。

コードでは、これはほとんど次のようになります。

public class MainWindow : Window
{
    // ...
    public void SetPage(UserControl page)
    {
         this.Content = page;
    }
}

// ...

public static class Pages
{
    private FirstUserControl _first;
    private SecondUserControl _second;
    private ThirdUserControl _third;
    private MainWindow _window = Application.Current.MainWindow;

    public UserControl First
    {
        get 
        { 
            if (_first == null) 
                _first =  new FirstUserControl();
            return _first;
        }
    }
    // ...
}

// Somewhere in B (after A -> B)

    MainWindow.SetPage(Pages.First);

ただし、ナビゲーションが本当に必要な場合は、ナビゲーションの静的な部分だけを使用して、シングルトーンのインスタンスをSwitchPageメソッドに渡すことができます。

于 2012-04-17T18:11:41.383 に答える
1
public partial class MainWindow : Window
{

    string un;
    string pw;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {

        un = txtName.Text;
        pw = txtPw.Text;

        if (un.Equals("steve") && pw.Equals ("cool"))
        {
            Home h= new Home();
            this.Content = h.Content; ***// this is where we change the window's contents***


        }
    }
}
于 2016-08-16T13:24:30.800 に答える