Silverlight:我可以在XAML中将事件设置为基类事件处理程序吗?

时间:2010-07-29 14:50:55

标签: silverlight events xaml inheritance

我创建了一个自定义用户控件,用作某些维护功能的基类。 我希望能够将一些事件连接到基类中定义的处理程序。 我可以在后面的代码中手动执行此操作,但希望在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”编译但在运行时失败。 我可以在后面的代码中添加它,但这不是那么有趣。 :)

2 个答案:

答案 0 :(得分:1)

Codebehind没问题,但解决方案相当简单。 例如,如果基类中的事件方法的名称为RegisterOnPageLoad(), 然后在你的子类中,xaml代码看起来像这样

Loaded="RegisterOnPageLoad".

不要忘记为方法提供正确的访问权限。

答案 1 :(得分:0)

为什么要尝试在XAML中编写Loaded事件?

如果您继承自CustomerMaintenanceControlBase,那么该基类应该能够连接自己。

它可能没那么有趣,但是要求在XAML中连接事件会使其无法将其置于基类中,除非它是“可选的”。我假设您的方法包含应该在加载派生控件的任何时候运行的逻辑,那么为什么让开发人员有机会通过忘记加载事件来生成问题?为什么不把它放在基类的构造函数中:

protected CustomerMaintenanceControlBase()
{
   Loaded += CustomerMaintenanceControlBase_Loaded; 
}

然后它会连接任何派生控件而无需开发人员的额外努力?