禁用FlowDocumentScrollViewer的打印命令绑定(并使用我的Window代替!)

时间:2011-05-13 13:21:08

标签: .net wpf flowdocumentscrollviewer

在我的WPF应用中,我创建了一个Window,其中包含FlowDocumentScrollViewer以及其他控件。

我已经为我的Window创建了一个命令绑定到Print命令,其中一个Executed处理程序运行一些自定义逻辑,并最终打印FlowDocumentScrollViewer的内容。

一切运作良好,但我遇到了一个问题。

如果用户在FlowDocumentScrollViewer中单击,然后按Ctrl + P,它将执行FlowDocumentScrollViewer本身的Print命令绑定,而不是我的Window的绑定。所以我的自定义逻辑没有被执行,并且打印输出不是应该的。

如何禁用FlowDocumentScrollViewer的Print命令绑定,并确保在所有情况下按Ctrl + P运行Windows的Print命令绑定?

2 个答案:

答案 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。