附属物:检查装订

时间:2015-08-06 13:32:40

标签: c# wpf xaml data-binding attached-properties

简短的问题

在运行时是否有一种快速了解特定附加属性的约束方式?

详细

我正在调试UserControl(继承ItemsControl),它通过样式将其项目的Canvas.LeftCanvas.Top绑定到ViewModel对象的两个属性。在运行时,我在某个位置放置一个断点,并想检查Canvas.Left附加属性的绑定。

请注意,我不希望看到项目的附加属性的当前值。我可以通过检查QuickWatch或立即窗口中Canvas.GetLeft(myItem)的值来轻松完成此操作。我想检查这里的实际绑定,即此附加属性绑定到myItem的VM属性名称。

我已经尝试过Snoop,遗憾的是它没有显示附加属性的绑定(如果我没有错过任何明显的东西)。

2 个答案:

答案 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;