【发布时间】:2019-08-08 17:13:25
【问题描述】:
当 WPF检索我的自定义 DependencyProperty 的值时,如何创建触发的断点?
I wrote this question poorly the first time。不幸的是,理解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}"
/>
【问题讨论】:
-
WPF 调用 GetValue。那不在您的代码中。没有办法在任何地方放置断点。
-
我了解它的工作原理。我正在寻找解决方法。当 WPF 设置 我的值时,我已经有了一个,我可以在元数据中指定一个值更改的回调并在那里放置一个断点。我正在寻找一些等效的吸气剂或其他解决方法
-
你也应该明白,你要求的是不可能的。
-
好吧,我已经问过了,所以也许外面的其他人已经找到了办法,嗯?
-
我认为唯一的选择是创建一个虚拟转换器并将其应用于绑定。通过虚拟转换器,我的意思是一个 IValueConverter,它只返回传入的任何内容。然后,当 WPF 获取 DP 的值时,它将把它传递给转换器。不完全是你所说的你想要的,但也许它会有所帮助?如果您有多个绑定,请添加一个唯一的转换器参数,以便您知道您正在处理哪一个。 Colorize="{Binding Colorizer, Converter={StaticResource DummyConverter}, ConverterParameter=Instance1}".