1

まず、WPFアプリのUIについて説明します。

ユーザーに常に表示される多くのボタンを含むウィンドウを作成しました(メインウィンドウと呼びます)。各ボタンは、タスクに関連する新しいウィンドウを開きます。私がやりたいのは、ボタンがクリックされるたびに、メインウィンドウが非表示になり(表示:折りたたまれている)、新しいウィンドウが表示されるようにすることです。この2番目のウィンドウには、2番目のウィンドウを非表示にしてメインウィンドウを表示するボタンも含まれます。また、開く2番目のウィンドウは、それに関連付けられたコマンドに従って異なるサイズになるため、それぞれに異なるウィンドウが表示されます。

TLDR一度に1つのウィンドウしか表示されないように複数のウィンドウを切り替えられるようにしたいのですが、複数のウィンドウ間の切り替えをどのように管理しますか?

注:メインウィンドウから2番目のウィンドウを表示することはできますが、2番目のウィンドウからメインを表示するのはどうでしょうか....取得できません....または、これを実装するための別のアプローチを誰かが表示できる場合:複数のウィンドウ以外

また、これはUIの拡張機能です。このページのように、この結晶化された種類のボタンを表示したいと思います。http: //postimage.org/image/4yibiulsh/ 誰でも適切な実装に誘導できますか?多くのサイトを経て、blendを介してこれらを作成しようとしましたが、私はUI担当者ではありません....plsはこのおかげで事前に助けが必要です。

4

2 に答える 2

1

そのためにいくつかのアプローチを使用できます。

メインウィンドウに簡単に戻すには:メインウィンドウの参照をセカンドウィンドウ(または表示する他のウィンドウ)に挿入し、そのウィンドウの終了イベントで、メインウィンドウの表示を[表示]に戻します。

また、すべてを同じウィンドウに保持しながら、表示と非表示を設定する異なるパネルを使用することを検討しましたか?それは同じ効果をもたらす可能性がありますが、それほど複雑ではありません...

お役に立てば幸いです...

于 2012-08-14T08:22:40.803 に答える
1

開閉の変更をサブスクライブする「ウィンドウマネージャー」を作成します。この場合、Windowクラスをオーバーロードする必要はありません。例(私のために働いた)。

public class WindowsManager
{
    static readonly List<Window> Windows=new List<Window>();

    public static T CreateWindow<T>(T window) where T:Window
    {
        Windows.Add(window);
        window.Closed += WindowClosed;
        window.IsVisibleChanged += WindowIsVisibleChanged;
        return window;
    }

    static void WindowIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        var mainWindow = Application.Current.Windows.OfType<MainWindow>().Single();
        mainWindow.Visibility = Equals(e.NewValue, true) ? Visibility.Hidden : Visibility.Visible;
    }

    static void WindowClosed(object sender, System.EventArgs e)
    {
        var window = (Window) sender;
        window.Closed -= WindowClosed;
        window.IsVisibleChanged -= WindowIsVisibleChanged;
        Windows.Remove(window);
    }
}

使い方:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        WindowsManager.CreateWindow(new Child1()).Show();
    }

    private void button2_Click(object sender, RoutedEventArgs e)
    {
        WindowsManager.CreateWindow(new Child2()).Show();
    }

したがって、子ウィンドウが閉じると、WindowsManagerはこれについて通知され、メインウィンドウの表示を更新します。

UPD1。 VisibleChangedからunscubscribeに行を追加しました

于 2012-08-14T09:11:37.900 に答える