我们的Silverlight应用程序包含第三方控件,其中包含一些ScrollBars(以及其他内容)。为了解决问题,我希望能够在第三方控件修改任何滚动条的最小或最大属性时停止在调试器中。然后,我将能够查看堆栈跟踪并了解有关正在发生的事情的更多信息。
如果我对ScrollBars的Value属性感兴趣,那一切都很简单--ScrollBar有一个ValueChanged事件,所以我可以添加一些抛弃该事件在ScrollBar上的一次性代码,在我的事件处理程序中设置一个断点,并调试。但是对于MinimumChanged或MaximumChanged没有相应的CLR事件,所以它不会那么简单。
我浏览了一篇关于using DependencyPropertyDescriptor to get dependency property change events的博文,但不幸的是,Silverlight中不存在DependencyPropertyDescriptor。
我怎样才能设置一个断点,只要ScrollBar的最小和最大属性发生变化就会触发该断点?
答案 0 :(得分:3)
我想到了以下想法:
此方法应允许您设置在Minimum或Maximum属性更改时触发的断点。但是,我不能保证你会得到一个可以帮助你的堆栈跟踪。
用户控件的代码隐藏可能如下所示:
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"
的ScrollBar,您可以在XAML中添加以下内容:
<local:DPContainer DebugValue="{Binding Path=Minimum, ElementName=someScrollBar}" />