#.net #wpf #flowdocumentscrollviewer
#.net #wpf #flowdocumentscrollviewer
Вопрос:
В моем приложении WPF я создал, Window
которое содержит FlowDocumentScrollViewer
среди прочих элементов управления.
Я создал привязку команды для моего окна к команде печати с выполняемым обработчиком, который выполняет некоторую пользовательскую логику и в конечном итоге печатает содержимое FlowDocumentScrollViewer.
Все работает хорошо, но у меня возникла одна проблема.
Если пользователь щелкает внутри FlowDocumentScrollViewer, а затем нажимает Ctrl P, он выполняет привязку команды печати самого FlowDocumentScrollViewer, а не моего окна. И поэтому моя пользовательская логика не выполняется, и распечатка не такая, какой должна быть.
Как я могу отключить привязку команды печати FlowDocumentScrollViewer и убедиться, что нажатие Ctrl P запускает привязку команды печати в моей Windows во всех случаях?
Ответ №1:
Быстрый и грязный способ — подключиться к PreviewKeyDown
событию FlowDocumentScrollViewer и установить для него значение обрабатывается при нажатии Ctrl P. Вот как будет выглядеть код:
void fds_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.P amp;amp; Keyboard.Modifiers == ModifierKeys.Control)
e.Handled = true;
}
Комментарии:
1. Круто, это действительно сработало бы — я использовал этот метод для других ситуаций в прошлом! Но я заставил его работать немного более чистым способом (см. Мой ответ). Спасибо.
Ответ №2:
Я заставил это работать, удалив обработчик событий из моего окна и подключив его непосредственно к FlowDocumentScrollViewer вместо этого:
<FlowDocumentScrollViewer x:Name="MyFlowDocumentScrollViewer">
<FlowDocumentScrollViewer.CommandBindings>
<CommandBinding Command="Print" Executed="Print_Executed" />
</FlowDocumentScrollViewer.CommandBindings>
</FlowDocumentScrollViewer>
Затем мне пришлось привязать CommandTarget любых других элементов управления командой печати (например, кнопки моей панели инструментов) непосредственно к FlowDocumentScrollViewer.