2

我想从派生的用户控件派生一个控件,但 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”,其中包含我想要从中派生的实际用户控件......例如

public class MyBaselineUserControl : UserControl { ... }

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

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

一旦这一行发生变化,编译器就会失败说明......

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

是否存在从另一个库派生的问题?

谢谢

4

1 回答 1

3

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

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


编辑

由于您说两者MyBaselineUserControlMyUserControl没有定义任何 XAML,所以事情应该可以工作。我自己试过了,没有任何问题。

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

于 2012-10-19T18:09:30.197 回答