WPF UserControl 继承另一个 UserControl

WPF UserControl inheriting another UserControl

我正在尝试按照 How can a WPF UserControl inherit a WPF UserControl?

中提到的方式继承 WPF 中的用户控件
namespace DMS.Presentation
{
    /// <summary>
    /// Interaction logic for WorkSpaceViewControl
    /// </summary>
    public abstract class WorkSpaceViewControl : UserControl
    {
        public WorkSpaceViewControl()
        {
            InitializeComponent();
        }

    private void InitializeComponent()
        {

        }
    }  

}

到目前为止,代码没有给出任何错误。但是当我在新的用户控件中继承它时:

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 的另一个部分声明存在。那么应该怎么实现,哪里出了问题呢?自一月份以来,由于这个继承瓶颈,我的整个项目都陷入了困境。非常感谢您的帮助。

根据您引用的答案,您的派生 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 命名空间,localWorkSpaceViewControl,两者都引用 "clr-namespace:DMS.Presentation"。您只需要其中之一(所以我保留了 local,它更符合惯用语),并且您需要使用命名空间来限定类型名称 WorkSpaceViewControl.

因此,XAML 声明开始于 <local:WorkSpaceViewControl ...

此外,派生 class 的 x:Class 值需要是 派生 class,而不是基础 [=31] =].因此,如上所示,应将 "DMS.Presentation.WorkSpaceViewControl" 设置为 "DMS.Presentation.AnimalWorkSpaceView"