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

2024-04-03

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

我第一次写这个问题很糟糕 https://stackoverflow.com/questions/57417213/why-is-my-breakpoint-on-wpf-dependencyproperty-retrieval-not-being-hit?noredirect=1#comment101314274_57417213。不幸的是,理解为什么我的断点没有被命中 https://learn.microsoft.com/en-us/dotnet/framework/wpf/advanced/xaml-loading-and-dependency-properties并没有解决我真正的问题。这是我应该问的问题。到处搜索我仍然不知道如何做到这一点。

如果 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 中的窗口并选择New --> 函数断点....

Type in:

System.Windows.DependencyObject.GetValue

启用健康)状况复选框并输入您的条件:

dp == YourNamespace.YourClass.YourDependencyProperty

Here, dp is the GetValue方法的参数名称(不要更改)和YourNamespace.YourClass.YourDependencyProperty是您的依赖属性的全名public场(变化)。

现在,按 F5 即可享受。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 WPF DependencyProperty 检索上放置断点? 的相关文章

随机推荐