Как добавить обработчик в динамической DataTemplate
-
25-09-2019 - |
Вопрос
Я успешно объявляю шаблон данных в коде за следующим образом:
private static DataTemplate CreateTemplate(string sortMemberPath, HorizontalAlignment horzAlignment)
{
const string xamlFormat
=
"<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" >"
+ "<StackPanel > "
+ " <TextBlock Margin=\"2,0\" VerticalAlignment=\"Center\" HorizontalAlignment=\"_HALIGNMENT_\" "
+
" Text=\"hello there\"> "
+ " </TextBlock> "
+ "</StackPanel>"
+ "</DataTemplate>";
return (DataTemplate) XamlReader.Load(xamlReturned);
}
Но теперь я хочу добавить размер измененного обработчика, изменив линию:
+ "<StackPanel > "
к
+ "<StackPanel SizeChanged="SizeChangedHandler" > "
У меня есть метод «SizeChangedHandler», объявленный в коде позади. Это приводит к ошибке разбора XAML, когда элемент управления пытается загрузить во время выполнения. Я подозреваю, что он не может найти обработчик «SizechangedHandler». Как я могу указать этот обработчик, чтобы Xaml Parser счастлив.
Решение
Вы можете попробовать что-то вроде:
dataTemplate.VisualTree.AddHandler(StackPanel.SizeChangedEvent, new SizeChangedEventHandler(SizeChangedHandler));
Редактировать:
Хорошо, для Silverlight вы можете попробовать с LASTContent. Способ данных DataTemplate, который возвращает и Uielement, к которому вы можете атачать событие. Извините, у меня нет против готовых к тестированию и посмотреть, работает ли он банкоматом.