我想从派生的用户控件派生控件,但是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. ...等等等等
是否存在派生自另一个图书馆的问题?
由于
答案 0 :(得分:3)
您无法从具有XAML定义的用户控件派生。只要你没有在你的基类中定义XAML,你就可以了。您可以找到有关错误的具体信息here。
解决此问题的一种方法是从Control
(或从Control
派生的另一个不是UserControl
的类)派生,并为您的基础和派生控件定义控件模板。 This page确切地解释了当您从Control
或UserControl
继承时可以做些什么,以及在决定您要从哪个方面做出决定时应该考虑哪些事项。
修改强>
由于你说MyBaselineUserControl
和MyUserControl
都没有定义任何XAML,所以事情应该有效。我自己尝试过,没有问题。
我建议您确保您的基本UserControl实际上是在没有XAML的情况下创建的,即它们应该是使用“Add - &gt; Class”创建的,而不是使用“Add - &gt ;用户控制“。