C# WPF控件的继承不影响´;行不通
我正在实现一个基于插件的软件,希望允许插件开发人员指定一个GUI元素来显示数据和设置。但是我无法对控件的基类进行子类化(在程序集中找不到类型)。这就是我所做的: 1.)在“widgetbase”项目中实现基类(仅代码,无XAML): 2.)构建项目,并在“mywidget”-项目中包含对该项目的引用 3.)我创建了一个新的自定义WPF控件,并更改了它将从我的基础派生的实现:C# WPF控件的继承不影响´;行不通,c#,.net,wpf,inheritance,plugins,C#,.net,Wpf,Inheritance,Plugins,我正在实现一个基于插件的软件,希望允许插件开发人员指定一个GUI元素来显示数据和设置。但是我无法对控件的基类进行子类化(在程序集中找不到类型)。这就是我所做的: 1.)在“widgetbase”项目中实现基类(仅代码,无XAML): 2.)构建项目,并在“mywidget”-项目中包含对该项目的引用 3.)我创建了一个新的自定义WPF控件,并更改了它将从我的基础派生的实现: <wc:WidgetControl x:Class="mywidget.MyWidgetControl"
<wc:WidgetControl x:Class="mywidget.MyWidgetControl"
xmlns:wc="clr-namespace:widgetbase"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Grid Margin="20" Background="Blue">
<TextBlock Text="Test" FontSize="18" FontWeight="Bold" />
</Grid>
</Grid>
</wc:WidgetControl>
代码隐藏:
namespace mywidget
{
/// <summary>
///
/// </summary>
public partial class MyWidgetControl : WidgetControl
{
public MyWidgetControl()
{
InitializeComponent();
}
}
}
名称空间mywidget
{
///
///
///
公共部分类MyWidgetControl:WidgetControl
{
公共MyWidgetControl()
{
初始化组件();
}
}
}
4.)我试图构建该项目,但在“widgetbase”中找不到类型“WidgetControl”。我不明白,我已经声明了public类型,包含了对基的引用,并调整了-codebeahind和XAML。在“万事俱备”背后的代码中,可以解析“WidgetControl”类型
为什么在XAML中找不到该类型
xmlns:wc="clr-namespace:widgetbase"
这不是一个完整的声明。如果要进入另一个程序集(因为需要引用,所以听起来很像),您必须注意在XMLNS中:
xmlns:wc="clr-namespace:widgetbase;assembly=WidgetCommon"
也考虑从<代码> UserControl < /COD>派生,<代码>控件 >稍微抽象一些。也就是说,名称空间应该是PascalCase:)
两个项目都在同一个解决方案中。该声明是VisualStudio提出的建议。我现在将其更改为xmlns:wc=“clr namespace:widgetbase;assembly=widgetbase.dll”,但这并不能解决问题解决方案并不重要,如果其项目不同,则必须使用程序集名称。删除DLL扩展名,您只需要名称xmlns:wc="clr-namespace:widgetbase;assembly=WidgetCommon"