WPF控件的继承;不起作用

本文关键字:不起作用 继承 控件 WPF | 更新日期: 2024-10-20 05:34:57

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

1.)在"小部件库"中实现-投影基类(仅代码,没有XAML):

namespace widgetbase
{
    public class WidgetControl : Control
    {
    }
}

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

4.)我试着构建这个项目,但在"widgetbase"中找不到"WidgetControl"类型。我不明白,我已经声明了类型public,包括了对基的引用,并调整了codebehind和XAML。在代码背后一切都很好,可以解析类型"WidgetControl"。

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

WPF控件的继承;不起作用

xmlns:wc="clr-namespace:widgetbase"

不是完整的声明。如果您要进入一个不同的程序集(听起来确实是这样,因为您需要一个引用),您必须注意在XMLNS:中

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

还要考虑从UserControl派生,Control稍微抽象一些。名称空间应该是PascalCase:)