如何在 WPF DependencyProperty 检索上设置断点?

How can I put a breakpoint on WPF DependencyProperty retrieval?

当 WPF 检索 我的自定义 DependencyProperty 的值时,如何创建触发断点?

I wrote this question poorly the first time. Unfortunately, understanding why my breakpoint is not hit 没有解决我真正的问题。这是我应该问的问题。找遍了还是看不懂怎么办。

如果 WPF 要绕过我的 getter 函数,还有其他方法吗?

我需要这个用于调试目的,以便在 WPF 检索此 属性.

的确切时刻检查调试器中我的控件的状态

刷新一下,下面是我的自定义依赖属性

private static readonly DependencyPropertyKey ColorizerPropertyKey =
    DependencyProperty.RegisterReadOnly(
        nameof(Colorizer),
        typeof(SurfaceSeries3DColorizer),
        typeof(SurfaceDisplay),
        new FrameworkPropertyMetadata());

private static readonly DependencyProperty ColorizerProperty = 
    ColorizerPropertyKey.DependencyProperty;

public SurfaceSeries3DColorizer Colorizer
{
    get => (SurfaceSeries3DColorizer) GetValue(ColorizerProperty);
    private set => SetValue(ColorizerPropertyKey, value);
}

...这是绑定到它的 XAML

<tk:SurfaceSeries3D ItemsSource="{Binding Points}"
                    XValueBinding="X"
                    YValueBinding="Y"
                    ZValueBinding="Z"
                    Colorizer="{Binding Colorizer}"
                    />

有一种方法可以做到这一点,但您必须记住,您的调试对象(您调试的应用程序)和调试器本身将变得非常无响应。

因此,如果您正在尝试诊断一些严重且罕见的错误,这可能会有所帮助。否则,它就没用了,因为你的应用程序几乎无法使用。

转到Visual Studio中的Breakpoints window并选择New --> 函数断点....

输入:

System.Windows.DependencyObject.GetValue

启用条件复选框并输入您的条件:

dp == YourNamespace.YourClass.YourDependencyProperty

这里,dpGetValue方法的参数名(不要改),YourNamespace.YourClass.YourDependencyProperty是你依赖的全名属性public 字段(更改)。

现在,按 F5 开始享受吧。

在后台,调试器将检查 System.Windows.DependencyObject.GetValue 方法的每一次 调用,并且当提供的参数是您的 属性 时,调试器会破坏您的应用程序。

请注意,WPF 非常频繁地调用该方法 - 这就是您的应用程序和调试器将变得无响应的原因:每次调用都会检查一个条件,并且该条件需要数据传输在调试器和被调试器之间。