WPF:我可以继承UserControl但不提供XAML吗?

时间:2012-05-08 17:12:54

标签: wpf user-controls

我正在扩展第三方应用程序,它使用看起来像PRISM的早期化身来提供可组合性。

我制作了一个视图原型,非常简单。为了让我的UI插入第三方UI,我的UserControl必须实现一个特定的界面(如IThirdPartyView)。

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

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

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

但是......在实践中我遇到了这个问题。

我设法让它编译但是在运行时点击它:

    The component 'CustomerProfile.ThirdParty.View.SecurityView2' does not have a
    resource identified by the URI '/CustomerProfile;component/view/securityview.xaml'

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

我希望我的问题很明确,我无法解释它!

1 个答案:

答案 0 :(得分:2)

您无法继承XAML。这是明确禁止的。您最好的机会是为内容创建一个通用的XAML模板,并将其应用于您的"衍生的"控制。您可以将模板放在任何位置,无论是相同的装配还是其他装配。

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

  • 将您的父控件创建为常规XAML控件
  • 编译程序集
  • 转到obj文件夹
  • 使用扩展名.g.cs
  • 检查控件的源代码
  • 复制自动生成的代码,然后重新开始使用纯C#
  • 创建控件