Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF控件的继承不影响´;行不通_C#_.net_Wpf_Inheritance_Plugins - Fatal编程技术网

C# 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"

我正在实现一个基于插件的软件,希望允许插件开发人员指定一个GUI元素来显示数据和设置。但是我无法对控件的基类进行子类化(在程序集中找不到类型)。这就是我所做的:

1.)在“widgetbase”项目中实现基类(仅代码,无XAML):

2.)构建项目,并在“mywidget”-项目中包含对该项目的引用

3.)我创建了一个新的自定义WPF控件,并更改了它将从我的基础派生的实现:

<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"