【问题标题】:Inheritance of WPF-Controls doesn´t workWPF-Controls 的继承不起作用
【发布时间】:2015-03-05 22:11:08
【问题描述】:

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

1.) 在“widgetbase”项目中实现基类(仅代码,无 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”。我不明白,我已经声明了公共类型,包括对基础的引用并调整了代码隐藏和 XAML。在代码隐藏中一切都很好,可以解析“WidgetControl”类型。

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

【问题讨论】:

    标签: c# .net wpf inheritance plugins


    【解决方案1】:
    xmlns:wc="clr-namespace:widgetbase"
    

    不是完整的声明。如果您要进入不同的程序集(听起来确实像,因为您需要参考),您必须在 XMLNS 中注明:

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

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

    【讨论】:

    • 两个项目都在同一个解决方案中。该声明是 Visual Studio 的建议。我现在将其更改为 xmlns:wc="clr-namespace:widgetbase;assembly=widgetbase.dll" 但它并没有解决问题
    • 解决方案无所谓,如果项目不同,则必须使用程序集名称。去掉 DLL 扩展,你只需要 name
    猜你喜欢
    • 2020-12-23
    • 2018-05-24
    • 2015-03-04
    • 2012-06-04
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多