我创建了一个自定义用户控件,用作某些维护功能的基类。 我希望能够将一些事件连接到基类中定义的处理程序。 我可以在后面的代码中手动执行此操作,但希望在XAML中分配它们。这不可能吗?
<src:CustomerMaintenanceControlBase x:Class="ProjectManager.CustomerMaintenanceControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
xmlns:my="clr-namespace:ProjectManager.CustomerServiceReference"
xmlns:src="clr-namespace:ProjectManager"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400"
PrimaryViewSourceName="customerViewSource"
Loaded="CustomerMaintenanceControlBase_Loaded"
>
Loaded =“CustomerMaintenanceControlBase_Loaded”编译但在运行时失败。 我可以在后面的代码中添加它,但这不是那么有趣。 :)
答案 0 :(得分:1)
Codebehind没问题,但解决方案相当简单。
例如,如果基类中的事件方法的名称为RegisterOnPageLoad()
,
然后在你的子类中,xaml代码看起来像这样
Loaded="RegisterOnPageLoad".
不要忘记为方法提供正确的访问权限。
答案 1 :(得分:0)
为什么要尝试在XAML中编写Loaded事件?
如果您继承自CustomerMaintenanceControlBase,那么该基类应该能够连接自己。
它可能没那么有趣,但是要求在XAML中连接事件会使其无法将其置于基类中,除非它是“可选的”。我假设您的方法包含应该在加载派生控件的任何时候运行的逻辑,那么为什么让开发人员有机会通过忘记加载事件来生成问题?为什么不把它放在基类的构造函数中:
protected CustomerMaintenanceControlBase()
{
Loaded += CustomerMaintenanceControlBase_Loaded;
}
然后它会连接任何派生控件而无需开发人员的额外努力?