1

我正在尝试显示模态对话框,我需要参考当前的 Shell 窗口:

public class OpenPopupWindowAction : TriggerAction<FrameworkElement>
{
    protected override void Invoke(object parameter)
    {
        var popup = new ChildWindow(); //(ChildWindow)ServiceLocator.Current.GetInstance<IPopupDialogWindow>();
        popup.Owner =  PlacementTarget ?? (Window)ServiceLocator.Current.GetInstance<IShell>();

我越来越:

Cannot set Owner property to a Window that has not been shown previously.

这是来自 Bootstrapper 的代码

public class Bootstrapper : UnityBootstrapper
{
    protected override System.Windows.DependencyObject CreateShell()
    {
        Container.RegisterInstance<IShell>(new Shell());
        return Container.Resolve<Shell>();

界面:

public interface IShell
{
    void InitializeComponent();
}

public partial class Shell : Window, PrismDashboard.IShell
4

1 回答 1

2

您设置的容器错误。

这告诉 Unity 将请求Shellan 时的特定实例返回给您:IShell

Container.RegisterInstance<IShell>(new Shell());

这告诉它解析Shell(not IShell) 的一个实例——它很乐意这样做,返回一个与以前不同的实例:

return Container.Resolve<Shell>();

结果,当您稍后IShell从容器中解析一个时,您会得到一个根本没有使用过的 shell 窗口,并且它的窗口句柄还没有创建。

改为这样做:

protected override System.Windows.DependencyObject CreateShell()
{
    var shell = new Shell();
    Container.RegisterInstance<IShell>(shell);
    return shell;
}
于 2013-09-05T20:55:43.303 回答