Silverlight 如何在“上设置断点?”;依赖项属性已更改";?

Silverlight 如何在“上设置断点?”;依赖项属性已更改";?,silverlight,debugging,dependency-properties,breakpoints,Silverlight,Debugging,Dependency Properties,Breakpoints,我们的Silverlight应用程序包含一个第三方控件,其中包含一些滚动条(以及其他内容)。为了解决问题,每当第三方控件修改其任何滚动条的最小或最大属性时,我希望能够在调试器中停止。然后,我将能够查看堆栈跟踪并了解更多关于发生了什么的信息 如果我对ScrollBars的Value属性感兴趣,那就很容易了——ScrollBar有一个ValueChanged事件,因此我可以添加一些一次性代码,将该事件挂接到ScrollBar上,在事件处理程序中设置一个断点,然后进行调试。但是对于MinimumCha

我们的Silverlight应用程序包含一个第三方控件,其中包含一些滚动条(以及其他内容)。为了解决问题,每当第三方控件修改其任何滚动条的最小或最大属性时,我希望能够在调试器中停止。然后,我将能够查看堆栈跟踪并了解更多关于发生了什么的信息

如果我对ScrollBars的Value属性感兴趣,那就很容易了——ScrollBar有一个ValueChanged事件,因此我可以添加一些一次性代码,将该事件挂接到ScrollBar上,在事件处理程序中设置一个断点,然后进行调试。但是对于MinimumChanged或MaximumChanged,没有相应的CLR事件,所以不会那么简单

我偶然看到一篇博文,其中谈到,但不幸的是,Silverlight中并不存在


我如何才能设置断点,在滚动条的最小和最大属性发生变化时触发该断点?

我想到了以下想法:

  • 创建具有依赖项属性的用户控件。(用户控件中的XAML实际上不会被使用,我们只需要dependency属性。)
  • 将用户控件的依赖项属性绑定到第三方控件的最小或最大属性(假定它们也是依赖项属性)
  • 在用户控件的代码隐藏中,将PropertyChangedCallback添加到dependency属性,并在其中放置断点
这种方法应该允许您设置一个断点,每当最小或最大属性更改时触发该断点。然而,我不能保证你会得到一个stacktrace来帮助你

用户控件背后的代码可能如下所示:

public partial class DPContainer : UserControl
{
    public static readonly DependencyProperty DebugValueProperty =
        DependencyProperty.Register("DebugValue", typeof(object), typeof(DPContainer), new PropertyMetadata(DebugValue_Changed));

    public DPContainer()
    {
        InitializeComponent();
    }

    public object DebugValue
    {
        get { return GetValue(DebugValueProperty); }
        set { SetValue(DebugValueProperty, value); }
    }

    private static void DebugValue_Changed(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        // Drop a breakpoint in this method.
    }
假设您有一个带有
x:Name=“someScrollBar”
的滚动条,那么您可以向XAML添加如下内容:

<local:DPContainer DebugValue="{Binding Path=Minimum, ElementName=someScrollBar}" />

类似问题:滚动条是第三方控件模板的一部分,因此我无法使用ElementName绑定到它。不过,我可能能够在代码中创建绑定。