2

我正在扩展一个第 3 方应用程序,它使用看起来像 PRISM 的早期版本来提供可组合性。

我制作了一个视图的原型,它非常简单。为了让我的 UI 插入到第 3 方 UI 中,我的 UserControl 必须实现一个特定的接口(如 IThirdPartyView)。

这很好。但是......现在我想以更生产的方式实现代码。一个关键点是我编写的 UserControls 需要不受污染,所以不要直接依赖于 3rd Party 的东西。如果我们切换到另一个第 3 方,我们不希望在代码中对另一个有依赖关系。

作为 OO 背景,我认为解决方案很简单:将我的 UI 放在一个不依赖于任何第 3 方的单独程序集中。我们称之为 CleanUserControl。然后在第 3 方特定实现中,扩展 CleanUserControl 类,并让该扩展类实现第 3 方特定接口以及扩展我的 CleanUserControl 类,因此类声明类似于:

public class SpecificUserControl : CleanUserControl, IThirdPartyView
{
    // Implementation of IThirdPartyView
}

但是...在实践中,我无法实现这一目标。

我设法让它编译,然后在运行时点击它:

    组件“CustomerProfile.ThirdParty.View.SecurityView2”没有
    由 URI '/CustomerProfile;component/view/securityview.xaml' 标识的资源

实际上,我认为我希望我的扩展只实现背后的代码并从父级继承 xaml,但我不知道这是否可以做到。

我希望我的问题很清楚,我很难解释!

4

1 回答 1

2

您不能继承 XAML。这是明确禁止的。您最好的机会是为内容创建一个通用 XAML 模板并将其应用于您的“派生”控件。您可以将模板放置在您想要的任何位置,无论是相同的程序集还是其他。

另一种可能性是实现您的父控件:

  • 将您的父控件创建为常规 XAML 控件
  • 编译程序集
  • 转到 obj 文件夹
  • 检查扩展名为 .g.cs 的控件的源代码
  • 复制自动生成的代码并重新开始使用纯 C# 创建控件
于 2012-05-08T18:03:28.927 回答