我正在实现一个基于插件的软件,并希望允许插件开发人员指定用于显示数据和设置的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中找不到类型?
答案 0 :(得分:2)
xmlns:wc="clr-namespace:widgetbase"
不是完整的声明。如果你要进入一个不同的程序集(因为你需要一个引用,你肯定听起来很像),你必须在XMLNS中注意到:
xmlns:wc="clr-namespace:widgetbase;assembly=WidgetCommon"
另外考虑从UserControl
派生,Control
稍微抽象一点。那,名称空间应该是PascalCase:)