0

MDIを使用するアプリケーションを作成しようとしています。これは、1つの大きなウィンドウと、多数の小さな子ウィンドウを備えたキャンバス領域があるという意味です。これらの小さなウィンドウは、サイズ変更、ドラッグ、およびキャンバス内での移動が可能です。

私はこのライブラリを使用して上記を達成しました:http ://wpfmdi.codeplex.com/

ただし、ライブラリにはバグがたくさんあり、非常に制限があります(放棄されたプロジェクトであるという事実を除けば)。

したがって、WPFでMDIを使用する他のオプションは何か疑問に思いました。上でリンクされているものと同様のライブラリをコーディングするのは面倒だと思います。基本的に、小さなウィンドウのドラッグとサイズ変更を処理し、キャンバスの端の外側にドラッグできないようにします。これは自分でコーディングするのは簡単ではないと思います。

何か案は?

4

3 に答える 3

0

私はあなたがこれを使うべきだと思います、それはずっと涼しいです:

http://avalondock.codeplex.com/

タブ、サイズ変更可能なドッキング可能なペインなどがあります。VisualStudioと非常によく似ています。

于 2012-10-21T14:20:38.820 に答える
0

このMDIライブラリをもう一度見てみました。私は問題を解決したと思います。MdiChildをクリックしたときと同じように、最大​​化する必要があります。

問題は、メインウィンドウのコンストラクターでMdiChildのWindowStateをMaximizedに設定すると、期待されるサイズ変更が得られないことです。したがって、メインウィンドウがロードされていることを確認してから、MdiChildがロードされていることを確認する必要があります。この場合、プログラムでMdiChildのWindowStateを設定し、期待される動作を得ることができます。

Loaded-eventsについては、次のサンプルコード(以下の完全なソースコードを確認してください)を参照してください。

void Main_Loaded(object sender, RoutedEventArgs e)
{
    var mdiChild = new MdiChild
    {
        Title = "Window Using Code",
        Content = new ExampleControl(),
        Width = 500,
        Height = 450,
        Position = new Point(200, 30)
    };
    Container.Children.Add(mdiChild);
    mdiChild.Loaded +=new RoutedEventHandler(mdiChild_Loaded);
}

void mdiChild_Loaded(object sender, RoutedEventArgs e)
{
    if (sender is MdiChild)
    {
        var mdiChild = (sender as MdiChild);
        mdiChild.WindowState = WindowState.Maximized;
    }
}

これが機能するためのソースコードです。これが役立つかどうか教えてください。

于 2012-10-21T16:52:29.197 に答える
0

WPFの新しいMDIオプション:

http://dragablz.net/2015/01/26/mdi-in-wpf-via-dragablz/

GitHubプロジェクト:https ://github.com/ButchersBoy/Dragablz

于 2015-01-26T22:26:01.063 に答える