5

这可能是在黑暗中拍摄,但是,我将如何在 PresentationFramework.dll 的以下内部静态方法中设置断点?

System.Windows.Documents.TextEditorTyping._ShowCursor()

我遇到了与Joe非常相似的情况,我正在使用 TextBox 控件和包含 ItemsControl 的 Popup 制作自定义自动完成文本框。当我将焦点放在文本框和显示为 StaysOpen="False" 的弹出窗口中并键入一些字符时,鼠标指针被隐藏(通过调用 System.Windows.Documents.TextEditorTyping.HideCursor 我相信)。它通常会在鼠标移动时重新显示,但是在检查是否应该隐藏时,弹出窗口似乎会处理此事件,因此当您在窗口周围移动指针时,指针会保持隐藏状态。

有一个怪癖,在第一次按键时,指针消失然后立即重新出现,然后在第二次按键时,指针保持隐藏状态。这表明有些东西正在调用 _ShowCursor(),我很想知道是什么。因此,这篇文章,以及设置上述断点的愿望。如何设置该断点?

关于我的实际问题,指针一旦移动就会隐藏,我希望通过自己模拟 StaysOpen="False" 来解决它而不阻止鼠标移动事件,或者自己触发鼠标移动事件以使指针重新出现。对此表示赞赏的任何其他提示。

4

4 回答 4

5

虽然您不能使用股票框架(没有可用的调试符号)做到这一点,但您可以使用 Reflector Pro 获得这种技巧:http ://www.red-gate.com/messageboard/viewforum.php?f=109

Reflector Pro 会将 WPF 程序集分解为 .cs 源文件,并动态生成它自己的调试 PDB - 然后您可以通过 Presentation Framework 程序集单步使用 Visual Studio(并设置断点)

祝你好运!

于 2010-01-16T22:04:38.640 回答
3

我不得不建议你在源代码文件中设置断点。它可以从参考源获得,我非常强烈推荐使用Mass Downloader工具来获取它。如果您将它安装到 c:\ReferenceSource,那么您需要的源代码文件将位于 c:\ReferenceSource\dd\wpf\src\FrameWork\System\Windows\Documents\TextEditorTyping.cs。

参考源相对于反编译源的一大优势是它包含源代码注释。并非所有的源代码都可用,但 WPF 的大块是可用的。

John Robbins 的安装说明非常好。我唯一遇到的问题是因为之前使用了 Microsoft 调试符号服务器提供的调试符号。我不得不手动从符号缓存中删除参考源中也可用的 .pdb 文件。

于 2010-01-16T22:52:31.907 回答
2

这可能有点棘手,但可以通过以下步骤完成。

  1. 从调试选项菜单中禁用“只是我的代码”
  2. 打开断点窗口并在函数处选择中断
  3. 如果函数,请输入全名
于 2010-01-16T22:13:01.443 回答
0

对于其他遇到此问题的人,这是我的做法(VS2015):

下载并安装 JetBrains dotPeek

将 dotPeek 作为符号服务器运行

如此处所述:https ://www.jetbrains.com/help/decompiler/2016.1/Using_product_as_a_Symbol_Server.html

您可能还必须删除/重命名已下载的 PresentationFramework.pdb 的错误版本,如上述链接中“可能的问题和解决方案”中所述

于 2016-10-30T12:03:29.237 回答