0

Caliburn.micro とカスタム ウィンドウ マネージャーを使用するアプリがあります。ウィンドウ マネージャーは独自のベース ウィンドウを作成するので、アプリケーション全体のルック アンド フィールをカスタマイズできます。

ウィンドウに次のようなコントロールを追加したいと思います。

<DockPanel>
    <ContentPresenter Content="{Binding CustomContent}" />
    <StatusBar Height="20" DockPanel.Dock="Bottom" Background="Blue"/>
</DockPanel>

Caliburn で ViewModel のユーザー コントロールを ContentPresenter に配置したいのですが、Caliburn がウィンドウのコンテンツ全体を置き換えています。

ウィンドウでこれを行いました:

using System.Windows;

namespace CaliburnCustomWindow
{
    public partial class WindowBase
    {
        public static readonly DependencyProperty CustomContentProperty = DependencyProperty.Register("CustomContent", typeof (object), typeof (WindowBase));

        public object CustomContent
        {
            get { return GetValue(CustomContentProperty); }
            set { SetValue(CustomContentProperty, value); }
        }

        public WindowBase()
        {
            InitializeComponent();
        }
    }
}

そして、これを行うように WindowManager を変更しました。

using System.Windows;
using Caliburn.Micro;

namespace CaliburnCustomWindow
{
    internal class AppWindowManager : WindowManager
    {
        protected override Window EnsureWindow(object model, object view, bool isDialog)
        {
            Window window = view as Window;

            if (window == null)
            {
                if (view.GetType() == typeof (MainView))
                {
                    window = new WindowBase
                    {
                        CustomContent = view,
                        SizeToContent = SizeToContent.Manual
                    };

                    window.Height = 500;
                    window.Width = 500;
                }

                window.SetValue(View.IsGeneratedProperty, true);
            }
            else
            {
                Window owner2 = InferOwnerOf(window);
                if (owner2 != null && isDialog)
                {
                    window.Owner = owner2;
                }
            }
            return window;
        }
    }
}

しかし、うまくいきません。CustomContent 依存関係プロパティへのバインディングが機能していないようです。

これを行うことは可能ですか?もしそうなら、どのように?

4

1 に答える 1

1

WindowManagerデフォルトの実装を使用して、ラッパーの新しいインスタンスを渡すDialogViewModel(および関連する を作成するDialogView)ことはできませんか?

this.WindowManager.ShowDialog(new DialogViewModel(myViewModel));

IDialogPresenterまたは、クライアント コードを簡素化する場合は、または同様の実装でこのコードを抽象化します。

this.DialogPresenter.Show(myViewModel);
于 2013-05-15T07:57:42.150 に答える