0

このリンクhttp://compositewpf.codeplex.com/discussions/250892で説明されているように、ツールバーのカスタム領域アダプターを実装しました。次のエラーが表示されます:「ToolBarRegionAdapter」には、0 引数を取るコンストラクターが含まれていません。ここに私のコード:

public class ToolBarRegionAdapter : RegionAdapterBase<ToolBar>
{
    public ToolBarRegionAdapter(IRegionBehaviorFactory behaviorFactory)
        : base(behaviorFactory)
    {
    }

    protected override IRegion CreateRegion()
    {
        return new AllActiveRegion();
    }

    protected override void Adapt(IRegion region, ToolBar regionTarget)
    {
        region.Views.CollectionChanged += (sender, e) =>
        {
            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                    foreach (FrameworkElement element in e.NewItems)
                    {
                        regionTarget.Items.Add(element);
                    }
                    break;

                case NotifyCollectionChangedAction.Remove:
                    foreach (UIElement elementLoopVariable in e.OldItems)
                    {
                        var element = elementLoopVariable;
                        if (regionTarget.Items.Contains(element))
                        {
                            regionTarget.Items.Remove(element);
                        }
                    }
                    break;
            }
        };
    }
}

Bootstrapper の ConfigureRegionAdapterMappings() メソッドをオーバーライドしました (Bootstrapper は MefBootstrapper を継承しています)。ここにコード:

protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
    RegionAdapterMappings regionAdapterMappings = base.ConfigureRegionAdapterMappings();
    regionAdapterMappings.RegisterMapping(typeof(ToolBar), new ToolBarRegionAdapter());
    return regionAdapterMappings;
}

コンパイルすると、次のエラーが表示されます。「ToolBarRegionAdapter」には、0 引数を取るコンストラクターが含まれていません。実際には、コンストラクターは IRegionBehaviorFactory を取りますが、コードにそのオブジェクトがありません。しかし、私が見た例では、リージョン アダプタは引数なしでインスタンス化されています。理由はありますか?ありがとう!

4

2 に答える 2

1

アダプターの追加方法が間違っています:

でなければなりません

protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
    RegionAdapterMappings regionAdapterMappings = base.ConfigureRegionAdapterMappings();
    regionAdapterMappings.RegisterMapping(typeof(ToolBar), Container.Resolve<ToolBarRegionAdapter>());
    return regionAdapterMappings;
}
于 2016-11-21T20:44:43.660 に答える
1

コンストラクター注入は常に優先されますが、それが不可能な場合は、あなたの場合のように、サービス ロケーターを使用してください...

ServiceLocator.Current.GetInstance<IRegionBehaviorFactory >()

...あなたが提供したリンクに示されているように、ところで...

于 2016-11-13T21:42:27.493 に答える