我有一个使用 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 依赖属性的绑定似乎不起作用。
有可能做到这一点吗?如果有怎么办?