WPF控件的继承不起作用

时间:2015-03-05 22:11:09

标签: c# .net wpf inheritance plugins

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

1。)在“widgetbase”中实现 - 项目基类(仅限代码,没有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”。我没有得到它,我已经公开了类型,包括对基数的引用并调整了两者 - codebehind和XAML。在代码隐藏中一切都很好,可以解析“WidgetControl”类型。

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

1 个答案:

答案 0 :(得分:2)

xmlns:wc="clr-namespace:widgetbase"

不是完整的声明。如果你要进入一个不同的程序集(因为你需要一个引用,你肯定听起来很像),你必须在XMLNS中注意到:

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

另外考虑从UserControl派生,Control稍微抽象一点。那,名称空间应该是PascalCase:)