这可能是在黑暗中拍摄的,但是,我如何在PresentationFramework.dll中的以下内部静态方法中设置断点?
System.Windows.Documents.TextEditorTyping._ShowCursor()
我遇到了与Joe非常相似的情况,我正在使用TextBox控件和包含ItemsControl的Popup创建自定义自动完成文本框。当我将焦点放在文本框中并且弹出窗口显示为StaysOpen =“False”,并键入一些字符时,鼠标指针将被隐藏(通过调用System.Windows.Documents.TextEditorTyping.HideCursor我相信)。它通常在鼠标移动时重新显示,但看起来弹出窗口在检查它是否应该隐藏时处理此事件,因此当您在窗口周围移动时,指针会保持隐藏状态。
有一个怪癖,在第一次按键时,指针消失然后立即重新出现,然后在第二次按键时,指针保持隐藏状态。这表明有些东西正在调用_ShowCursor(),我很想知道是什么。因此这篇文章,以及设置上述断点的愿望。如何设置该断点?
关于我的实际问题,指针一旦移动就保持隐藏,我希望通过自己模拟StaysOpen =“False”而不阻止鼠标移动事件来解决它,或者自己解雇鼠标移动事件以使指针重新出现。关于此的任何其他提示表示赞赏。
答案 0 :(得分:5)
虽然您无法使用库存框架(没有可用的调试符号),但您可以使用Reflector Pro获得此类技巧:http://www.red-gate.com/messageboard/viewforum.php?f=109
Reflector Pro会将WPF程序集反汇编成.cs源文件,并动态生成它自己的调试PDB - 然后通过Presentation Framework程序集单步执行Visual Studio(并设置断点)
祝你好运!答案 1 :(得分:3)
我不得不建议你在源代码文件中设置断点。它可以从参考源获得,我强烈建议使用Mass Downloader工具来获取它。如果您将它安装到c:\ ReferenceSource,那么您需要的源代码文件将在c:\ ReferenceSource \ dd \ wpf \ src \ FrameWork \ System \ Windows \ Documents \ TextEditorTyping.cs中提供。
参考源优于反编译源的一大优势是它包含源代码注释。并非所有的源代码都可用,但是非常大的WPF块。
John Robbins'install instructions非常好。我遇到的唯一打嗝是由以前使用Microsoft调试符号服务器提供的调试符号引起的。我不得不手动删除符号缓存中也可从参考源获得的.pdb文件。
答案 2 :(得分:2)
这可能有点棘手,但可以通过以下步骤完成。
答案 3 :(得分:0)
对于遇到此问题的其他人,我是这样做的(VS2015):
下载并安装了JetBrains dotPeek
将dotPeek作为符号服务器运行
如此处所述:https://www.jetbrains.com/help/decompiler/2016.1/Using_product_as_a_Symbol_Server.html
您可能还必须删除/重命名已下载的错误版本的PresentationFramework.pdb,如上面链接中的“可能的问题和解决方案”中所述