在我的WPF应用中,我创建了一个Window
,其中包含FlowDocumentScrollViewer
以及其他控件。
我已经为我的Window创建了一个命令绑定到Print命令,其中一个Executed处理程序运行一些自定义逻辑,并最终打印FlowDocumentScrollViewer的内容。
一切运作良好,但我遇到了一个问题。
如果用户在FlowDocumentScrollViewer中单击,然后按Ctrl + P,它将执行FlowDocumentScrollViewer本身的Print命令绑定,而不是我的Window的绑定。所以我的自定义逻辑没有被执行,并且打印输出不是应该的。
如何禁用FlowDocumentScrollViewer的Print命令绑定,并确保在所有情况下按Ctrl + P运行Windows的Print命令绑定?
答案 0 :(得分:1)
快速而又脏的方法是挂钩FlowDocumentScrollViewer的PreviewKeyDown
事件,并在按下Ctrl + P时将其设置为处理。这是代码的样子:
void fds_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.P && Keyboard.Modifiers == ModifierKeys.Control)
e.Handled = true;
}
答案 1 :(得分:1)
我通过从窗口中删除事件处理程序并将其直接挂接到FlowDocumentScrollViwer来实现它:
<FlowDocumentScrollViewer x:Name="MyFlowDocumentScrollViewer">
<FlowDocumentScrollViewer.CommandBindings>
<CommandBinding Command="Print" Executed="Print_Executed" />
</FlowDocumentScrollViewer.CommandBindings>
</FlowDocumentScrollViewer>
然后我必须将任何其他打印命令控件的CommandTarget(例如我的工具栏按钮)直接绑定到FlowDocumentScrollViewer。