【问题标题】:wpf derive from derived controlwpf 从派生控件派生
【发布时间】:2012-10-19 17:24:15
【问题描述】:

我想从派生的用户控件中派生一个控件,但 xaml 解决它时遇到问题。但是,首先是简单的场景。我有一个库 MyControls.dll。在那,我有一个基于 .cs 文件中的“UserControl”的控件,例如

public class MyUserControl : UserControl { ... }

没问题。现在,我想创建一个派生自此的第二个(视觉)控件......所以,我在同一个 MyControls.dll 库中分别创建了一个名为 NewFromMyUserControl.xaml.cs 和 NewFromMyUserControl.cs 的新 UserControl,例如

public partial class NewFromMyUserControl : MyUserControl { ... }

现在,在 Xaml 中,我...

<mylib:MyUserControl x:Class="MyControls.SubFolder1.NewFromMyUserControl"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        xmlns:mylib ="clr-namespace:MyControls" (blah blah) />
</mylib:MyUserControl>

这没问题。为简单起见,“MyUserControl”或“NewFromMyUserControl”类中没有实际代码......只是测试派生实现。

现在,问题。我有另一个库“MyBaselineControls.dll”,其中包含我想要从中派生的实际 UserControl……例如

public class MyBaselineUserControl : UserControl { ... }

现在,我想将“MyUserControl”更改为从另一个派生而来,例如

from
    public class MyUserControl : UserControl { ... }
to
    using MyBaselineControls;
    public class MyUserControl : MyBaselineUserControl { ... }

这一行一更改,编译器就会失败说明...

错误 2“MyControls.MyUserControl”不能是 XAML 文件的根,因为它是使用 XAML 定义的。第 1 行第 19 位。...等等等等

是否存在从其他库派生的问题?

谢谢

【问题讨论】:

标签: wpf xaml c#-4.0 user-controls derived-class


【解决方案1】:

您不能从具有 XAML 定义的用户控件派生。只要您不在基类中定义 XAML,就可以了。关于你的错误的具体信息可以在here找到。

解决此问题的一种方法是从Control(或从Control 而不是UserControl 派生的另一个类)派生,并为您的基控件和派生控件定义控件模板。 This page 准确解释了从 ControlUserControl 继承时可以做什么,以及在决定要从哪个派生时应考虑哪些事项。


编辑

既然你说MyBaselineUserControlMyUserControl 都没有定义任何XAML,那么事情应该可以工作。我自己试过了,没问题。

我建议您确保您的基本用户控件实际上是在没有 XAML 的情况下创建的,即它们应该是使用 "Add --> Class" 而不是使用"Add --> User 创建的控制”。

【讨论】:

  • 这就是重点...“MyBaselineControls”和“MyUserControl”中的基类都是-code only-...只有“NewFromMyUserControl”是第一个使用xaml的VISUAL控件..其他两个没有。
  • 您是否在两个单独的类库中创建它们...即:“MyBaseline”是一个类库,“MyUserControl”在一秒钟内,“NewFromMyUserControl”在同一个第二个库为“MyUserControl”?
  • 在把它放了一个周末再回来之后,它终于重新编译而没有错误(正如我最初希望的那样)。感谢您确认我的想法并不疯狂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 2010-09-27
  • 1970-01-01
相关资源
最近更新 更多