У меня есть FlowDocument, который имеет несколько элементов, таких как:
<InlineUIContainer>
<Button Click="Button_Click" Tag="123456789890">
<Image Source="Images\Image1.png" />
</Button>
</InlineUIContainer>
Это хранится в файле .xaml и загружается в какой-то момент, делая что-то вроде этого:
flowDocument = XamlReader.Load(xamlFile, parserContext) as FlowDocument;
flowDocumentReader.Document = flowDocument;
Загрузка завершается со следующей ошибкой:
XamlParseException - Не удалось создать «щелчок» из текста «Button_Click»
Метод Button_Click - это метод, который существует в MainWindow, в котором находится FlowDocumentReader, и идея заключается в том, что тег кнопки имеет некоторый идентификатор (идентификатор инвентаря), и обработчик щелчка будет что-то делать с этим идентификатором инвентаря.
Если FlowDocument находится в MainWindow.xaml, все в порядке с этим обработчиком событий Button_Click, но я подозреваю, что когда он загружает файл с диска, он ничего не знает об обработчике.
Как я могу решить это? Идеи?
Обновление
Хотя я думаю, что решение Павла сработает, я закончил тем, что сделал следующее, и, похоже, он работает довольно хорошо. В моем FlowDocumentReader Xaml я добавил следующее:
<FlowDocumentReader ButtonBase.Click="Button_Click">
и удалил событие click из xaml для кнопок. Я все еще борюсь с WPF и XAML, но этот общий обработчик кликов работает, я полагаю, из-за перенаправленных событий. Когда щелчок происходит для любой из кнопок в моем загруженном FlowDocument, он всплывает, пока не найдет обработчик, в моем случае тот, который указан в элементе FlowDocumentReader.
Несмотря на разочарование, которое я испытал от непонимания, очень приятно, что оно работает таким образом.
Обновление 2:
Побочным эффектом использования перенаправленных событий для обработки события Click для кнопок моего FlowDocument является то, что кнопки, являющиеся частью самого FlowDocumentReader, в конечном итоге превращают свои события Click в этот обработчик, созданный мной, который является определенно не то, что я хочу, чтобы произошло.
Чтобы решить эту проблему, я в настоящее время полагаюсь на то, что в обработчике, который выглядит так:
private void Button_Click(object sender, RoutedEventArgs e)
{
if (e.Source is Button)
{
MessageBox.Show("Button in doc clicked");
}
}
элементом «Source» в RoutedEventArgs является «Button» для кнопок в FlowDocument и «FlowDocumentReader» для тех, которые являются частью FlowDocumentReader. Кажется, работает, хотя мне было бы интересно услышать другие идеи.