Отключите привязку команды печати FlowDocumentScrollViewer (и используйте вместо этого мое окно!)

#.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.