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 命名空间,local
和 WorkSpaceViewControl
,两者都引用 "clr-namespace:DMS.Presentation"
。您只需要其中之一(所以我保留了 local
,它更符合惯用语),并且您需要使用命名空间来限定类型名称 WorkSpaceViewControl
.
因此,XAML 声明开始于 <local:WorkSpaceViewControl ...
此外,派生 class 的 x:Class
值需要是 派生 class,而不是基础 [=31] =].因此,如上所示,应将 "DMS.Presentation.WorkSpaceViewControl"
设置为 "DMS.Presentation.AnimalWorkSpaceView"
。
我正在尝试按照 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 命名空间,local
和 WorkSpaceViewControl
,两者都引用 "clr-namespace:DMS.Presentation"
。您只需要其中之一(所以我保留了 local
,它更符合惯用语),并且您需要使用命名空间来限定类型名称 WorkSpaceViewControl
.
因此,XAML 声明开始于 <local:WorkSpaceViewControl ...
此外,派生 class 的 x:Class
值需要是 派生 class,而不是基础 [=31] =].因此,如上所示,应将 "DMS.Presentation.WorkSpaceViewControl"
设置为 "DMS.Presentation.AnimalWorkSpaceView"
。