WPF-Controls 的继承不起作用

Inheritance of WPF-Controls doesn´t work

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

1.) 在 "widgetbase"-project 基础 class 中实现(仅代码,无 XAML):

namespace widgetbase
{
    public class WidgetControl : Control
    {
    }
}

2.) 构建项目并在 "mywidget"-project.

中包含对它的引用

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();
        }
    }
}

4.) 我尝试构建项目,但在 "widgetbase" 中找不到类型 "WidgetControl"。我不明白,我声明了类型 public,包括对基的引用并调整了代码隐藏和 XAML。在代码隐藏中一切正常,类型 "WidgetControl" 可以解析。

为什么在 XAML 中找不到类型?

xmlns:wc="clr-namespace:widgetbase"

不是完整的声明。如果你要进入一个不同的程序集(当然听起来你是因为你需要一个参考),你必须在 XMLNS 中注意:

xmlns:wc="clr-namespace:widgetbase;assembly=WidgetCommon"

也考虑从UserControl派生,Control更抽象一点。那,命名空间应该是 PascalCase :)