wpf派生自派生控件

时间:2012-10-19 17:24:16

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

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

public class MyUserControl : UserControl { ... }

没问题。现在,我想创建一个派生自此的第二个(VISUAL)控件...所以,我在这个相同的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. ...等等等等

是否存在派生自另一个图书馆的问题?

由于

1 个答案:

答案 0 :(得分:3)

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

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


修改

由于你说MyBaselineUserControlMyUserControl都没有定义任何XAML,所以事情应该有效。我自己尝试过,没有问题。

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