Shell.xaml中创建区域期间发生KeyNotFoundException

时间:2018-07-27 15:31:52

标签: wpf prism

我刚开始使用PRISM,遇到无法解决的异常。

<Window x:Class="Workplace.Shell"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:prism="http://www.codeplex.com/prism"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">

    <Grid>
        <Grid Name="Header" prism:RegionManager.RegionName="Header">

        </Grid>
    </Grid>
</Window>

using Autofac;
using Prism.Autofac;
using Prism.Modularity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace Workplace
{
    class Bootstrapper : AutofacBootstrapper
    {
        protected override DependencyObject CreateShell()
        {
            return new Shell();
        }

        protected override void InitializeShell()
        {
            base.InitializeShell();

            Application.Current.MainWindow = (Window) this.Shell;
            Application.Current.MainWindow.Show();
        }

        protected override void ConfigureModuleCatalog()
        {
            base.ConfigureModuleCatalog();
        }
    }
}

运行后出现异常:

  

KeyNotFoundException:类型的IRegionAdapter   System.Windows.Controls.Grid未在区域适配器中注册   映射。您可以通过以下方法为此控件注册一个IRegionAdapter:   覆盖了中的ConfigureRegionAdapterMappings方法   引导程序。

Okey,但AutofacBootstrapper类没有要覆盖的名为ConfigureRegionAdapterMappings的方法。

首先,我认为AutofacBootstrapper出了点问题,但是即使将其更改为UnityBootstrapper也仍然存在问题。但是第二个允许我覆盖ConfigureRegionAdapterMappings

1 个答案:

答案 0 :(得分:1)

Grid对于某个区域不是有用的主机。尝试改用ContentControl

当然,如果您绝对想使用Grid,则可以创建并注册自定义区域适配器,但是我看不出有任何好处。