在运行时是否有一种快速了解特定附加属性的约束方式?
我正在调试UserControl(继承ItemsControl
),它通过样式将其项目的Canvas.Left
和Canvas.Top
绑定到ViewModel对象的两个属性。在运行时,我在某个位置放置一个断点,并想检查Canvas.Left
附加属性的绑定。
请注意,我不希望看到项目的附加属性的当前值。我可以通过检查QuickWatch或立即窗口中Canvas.GetLeft(myItem)
的值来轻松完成此操作。我想检查这里的实际绑定,即此附加属性绑定到myItem
的VM属性名称。
我已经尝试过Snoop,遗憾的是它没有显示附加属性的绑定(如果我没有错过任何明显的东西)。
答案 0 :(得分:0)
在运行时
是否有一种快速了解特定附加属性的约束方式
是的,只是在某处覆盖附加属性(在你的窗口中?):
<Window x:Class="WpfApplication1.MainWindow" ... >
<Grid Canvas.Top="123"/>
</Window>
和代码
public MainWindow()
{
InitializeComponent();
Canvas.TopProperty.OverrideMetadata(typeof(MainWindow), new FrameworkPropertyMetadata((d, e) =>
{
// you will get here for each Canvas.Top set in MainWindow
MessageBox.Show(d.ToString());
}));
}
答案 1 :(得分:0)
您可以通过编程方式获取附加属性绑定,就像获得正常的依赖项属性绑定一样。即从代码后面获取控件的Canvas.LeftProperty
附加属性绑定名称myItemsControl
:
BindingExpression bindingExpression = myItemsControl.GetBindingExpression(Canvas.LeftProperty);
Binding parentBinding = bindingExpression.ParentBinding;