如何创建 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(使用前将#替换为@)