我试图以How can a WPF UserControl inherit a WPF UserControl?
中提到的方式继承WPF中的usercontrolnamespace DMS.Presentation
{
/// <summary>
/// Interaction logic for WorkSpaceViewControl
/// </summary>
public abstract class WorkSpaceViewControl : UserControl
{
public WorkSpaceViewControl()
{
InitializeComponent();
}
private void InitializeComponent()
{
}
}
}
到目前为止代码并没有给出任何错误。但是当我在一个新的usercontrol中继承它时:
namespace DMS.Presentation
{
/// <summary>
/// Interaction logic for AnimalWorkSpaceView.xaml
/// </summary>
public partial class AnimalWorkSpaceView : WorkSpaceViewControl
{
public AnimalWorkSpaceView()
{
InitializeComponent();
}
}
}
它的XAML文件是:
//I have tried both WorkSpaceViewControl:UserControl and UserControl:WorkSpaceViewControl here
<UserControl:WorkSpaceViewControl x:Class="DMS.Presentation.WorkSpaceViewControl"
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:local="clr-namespace:DMS.Presentation"
xmlns:WorkSpaceViewControl="clr-namespace:DMS.Presentation"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
</UserControl:WorkSpaceViewControl>
我收到一条消息,称部分修饰符不存在。存在另一个 WorkSpaceViewControl 的部分声明。那么我应该如何实现它以及哪里出了问题呢?自1月以来,由于这种继承瓶颈,我的整个项目都陷入困境。帮助将非常感激。
答案 0 :(得分:5)
根据您引用的答案,您的派生UserControl
XAML看起来应该更像这样:
<local:WorkSpaceViewControl x:Class="DMS.Presentation.AnimalWorkSpaceView"
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:local="clr-namespace:DMS.Presentation"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
</local:WorkSpaceViewControl>
您已声明了两个不同的XML命名空间local
和WorkSpaceViewControl
,两者都引用了"clr-namespace:DMS.Presentation"
。您只需要其中一个(因此我保留local
,它更具惯用性),您需要使用命名空间来限定类型名称WorkSpaceViewControl
。
因此,XAML声明以<local:WorkSpaceViewControl ...
此外,派生类的x:Class
值必须是派生的类,而不是基类。因此,应该将"DMS.Presentation.WorkSpaceViewControl"
设置为"DMS.Presentation.AnimalWorkSpaceView"
,而不是{{1}},如上所示。