Wpf RegisterAttached String PropertyName导致AttachedProperty未激发
我在附加属性方面遇到了一个奇怪的问题,当我在调用RegisterAttached时为附加属性的名称指定属性名并正确命名时(比如TranslateProperty和“Translate”),附加属性实现的代码不会触发。只是没人打电话。如果我将字符串名称更改为Translate以外的任何名称(比如说“Translate”),那么代码将被很好地调用 以下是实现: 公共类TranslateExtension:DependencyObject { 上述方法实际上是有效的,因为字符串中的属性是Translate。如果我将字符串值更改为“Translate”,则会失败 我在同一个类中有另外两个附加属性,它们表现出完全相同的行为-与AttachedProperty的名称相同,并且它们没有被调用。请将其命名为其他名称,它就会工作 我不确定这里发生了什么。我的代码实际上使用的是无效的名称,但我不明白为什么,更重要的是,我不确定这个错误的命名是否会导致任何副作用Wpf RegisterAttached String PropertyName导致AttachedProperty未激发,wpf,attached-properties,Wpf,Attached Properties,我在附加属性方面遇到了一个奇怪的问题,当我在调用RegisterAttached时为附加属性的名称指定属性名并正确命名时(比如TranslateProperty和“Translate”),附加属性实现的代码不会触发。只是没人打电话。如果我将字符串名称更改为Translate以外的任何名称(比如说“Translate”),那么代码将被很好地调用 以下是实现: 公共类TranslateExtension:DependencyObject { 上述方法实际上是有效的,因为字符串中的属性是Transla
有人能看出我是否忽略了一些显而易见的东西吗?我在AttachedProperties的文章中重温了一些例子,我没有看到那些使用特殊名称的实现——它们总是将string属性命名为与所附属性相同的名称。你不应该在SetTranslate中添加额外的代码,因为它不会得到调用ed.来自MSDN: 自定义依赖项属性的含义 因为当前的WPF实现 的XAML处理器行为 属性设置绕过包装器 完全地,你不应该把任何 集合中的附加逻辑 您的应用程序的包装器的定义 自定义依赖项属性。如果 那么,集合定义中的这种逻辑 在以下情况下将不执行逻辑: 该属性是在XAML中设置的,而不是 而不是代码 类似地,XAML的其他方面 获取属性值的处理器 从XAML处理中,还可以使用GetValue 而不是使用包装器。 因此,你也应该避免任何 get中的附加实现 GetValue调用之外的定义
相反,将PropertyChangedCallback添加到您的FrameworkPropertyMetadata()构造函数中。没错!将PropertyChangedCallback()添加到新的FrameworkMetaData()构造函数中成功了。但我仍然想知道,为什么具有无效名称(如“Translate”)会触发调用SetTranslate方法。这真是奇怪的行为。
public static readonly DependencyProperty TranslateProperty =
DependencyProperty.RegisterAttached("Translate_",
typeof(bool),
typeof(TranslateExtension),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
public static void SetTranslate(UIElement element, bool value)
{
AssignKeys(element);
element.SetValue(TranslateProperty, value);
}
public static bool GetTranslate(UIElement element)
{
return (bool)element.GetValue(TranslateProperty);
}
public bool Translate
{
set { base.SetValue( TranslateProperty, value); }
}
...
}