我正在尝试在网格控件上注册 WPF 附加属性,但是,我今天遇到了非常奇怪的行为:
public static class MyClass
{
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.RegisterAttached("MyProperty", typeof(string),
typeof(MyClass), null);
public static string GetMyProperty(DependencyObject d)
{
return (string)d.GetValue(MyPropertyProperty);
}
public static void SetMyProperty(DependencyObject d, string value)
{
d.SetValue(MyPropertyProperty, value); //<-- set breakpoint here
}
}
XAML:
<GridControl local:MyClass.MyProperty="My Name">
...
</GridControl>
当我这样写时,附加属性的设置器永远不会被执行。和价值永远不会被设定。但我可以窥探网格并发现附加的属性附加了一个空值。
但是当我将附加的属性名称更改为:
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.RegisterAttached("xxxMyProperty", typeof(string),
typeof(MyClass), null);
即使用与 MyProperty 不同的名称。然后可以打断点!和值可以设置!
此外,当我将附加属性更改为:
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.RegisterAttached("MyProperty", typeof(string),
typeof(UIElement), null);
ie把所有者类型改成UIElement,然后我也可以打断点了,不知道为什么?
但是,当我在 XAML 中设置绑定而不是字符串常量时,上述每种情况都会出现异常提示A 'Binding' can only be set on a DependencyProperty of a DependencyObject
绑定 XAML 示例:
<GridControl local:MyClass.MyProperty="{Binding MyStringValue}">
...
</GridControl>
有没有人遇到过这种奇怪的行为?我在我的情况下缺少什么?提前感谢您的回复!