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 :)
我正在实现一个基于插件的软件,并希望允许插件开发人员指定用于显示数据和设置的 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 :)