Silverlight: Могу ли я установить событие для обработчика событий базового класса в XAML? - PullRequest
2 голосов
/ 29 июля 2010

Я создал пользовательский элемент управления для использования в качестве базового класса для некоторых функций обслуживания.Я хотел бы иметь возможность подключить некоторые события к обработчикам, определенным в базовом классе.Я могу сделать это вручную в коде, но хотел бы назначить их в 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 ]

1 голос
/ 12 июля 2012

Codebehind в порядке, но решение довольно простое.Если, например, ваш метод события в базовом классе имеет имя RegisterOnPageLoad(), то в вашем дочернем классе код xaml выглядит следующим образом

Loaded="RegisterOnPageLoad".

Не забудьте дать методу правильный доступ.

0 голосов
/ 29 июля 2010

Почему вы пытаетесь закодировать событие Loaded в XAML?

Если вы наследуетесь от CustomerMaintenanceControlBase, то этот базовый класс должен иметь возможность подключаться сам.

Это может быть не так весело, но требование о том, чтобы событие проводилось в XAML, отрицает цель помещения его в базовый класс, если только оно не является «необязательным». Я предполагаю, что ваш метод содержит логику, которая должна запускаться каждый раз, когда производные элементы управления загружаются, так почему бы дать разработчикам возможность генерировать проблемы, забыв событие загрузки? Почему бы просто не поместить это в свой конструктор в базовом классе:

protected CustomerMaintenanceControlBase()
{
   Loaded += CustomerMaintenanceControlBase_Loaded; 
}

И тогда он подключится к любому производному элементу управления без дополнительных усилий со стороны разработчика?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...