У меня FlowDocument, который имеет некоторые элементы, как так:WPF XAML Кнопка Нажмите обработчик в задаче InlineUIContainer
<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, но я подозреваю, что когда он загружает файл с диска, он ничего не знает о обработчике.
Как я могу это решить? Идеи?
Update
В то время как я думаю, решение Павло был бы работать, я в конечном итоге делает следующее, и это, кажется, работает достаточно хорошо. В моем FlowDocumentReader Xaml я добавил следующее:
<FlowDocumentReader ButtonBase.Click="Button_Click">
и удалить событие щелчка из XAML для кнопок. Я по-прежнему сталкиваюсь с WPF и XAML, но этот общий обработчик кликов работает, я считаю, из-за перенаправленных событий. Когда Click происходит для любой из кнопок в моем загруженном FlowDocument, он пузырится до тех пор, пока не найдет обработчик, в моем случае тот, который указан в элементе FlowDocumentReader.
Несмотря на разочарование, которое у меня возникло из-за непонимания, он опрятен тем, что он работает таким образом.
Update 2:
Побочный эффект, опираясь на маршрутизировать события для обработки события нажатия на кнопки моего FlowDocument является то, что кнопки, которые являются частью FlowDocumentReader сам в конечном итоге барботирование их клики в этот обработчик catch-all, который я создал, что определенно не то, что я хочу.
Чтобы решить эту проблему, я в настоящее время, опираясь на тот факт, что в обработчике, который выглядит так:
private void Button_Click(object sender, RoutedEventArgs e)
{
if (e.Source is Button)
{
MessageBox.Show("Button in doc clicked");
}
}
член «Источник» в RoutedEventArgs является «Button» для кнопок в FlowDocument и «FlowDocumentReader» для тех, которые являются частью FlowDocumentReader. Появляется, чтобы работать, хотя мне было бы интересно услышать другие идеи.
Я думаю, что ваше решение будет работать. См. Обновление моего вопроса о том, что я сделал, чтобы решить эту проблему. – itsmatt