Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf RegisterAttached String PropertyName导致AttachedProperty未激发_Wpf_Attached Properties - Fatal编程技术网

Wpf RegisterAttached String PropertyName导致AttachedProperty未激发

Wpf RegisterAttached String PropertyName导致AttachedProperty未激发,wpf,attached-properties,Wpf,Attached Properties,我在附加属性方面遇到了一个奇怪的问题,当我在调用RegisterAttached时为附加属性的名称指定属性名并正确命名时(比如TranslateProperty和“Translate”),附加属性实现的代码不会触发。只是没人打电话。如果我将字符串名称更改为Translate以外的任何名称(比如说“Translate”),那么代码将被很好地调用 以下是实现: 公共类TranslateExtension:DependencyObject { 上述方法实际上是有效的,因为字符串中的属性是Transla

我在附加属性方面遇到了一个奇怪的问题,当我在调用RegisterAttached时为附加属性的名称指定属性名并正确命名时(比如TranslateProperty和“Translate”),附加属性实现的代码不会触发。只是没人打电话。如果我将字符串名称更改为Translate以外的任何名称(比如说“Translate”),那么代码将被很好地调用

以下是实现:

公共类TranslateExtension:DependencyObject {

上述方法实际上是有效的,因为字符串中的属性是Translate。如果我将字符串值更改为“Translate”,则会失败

我在同一个类中有另外两个附加属性,它们表现出完全相同的行为-与AttachedProperty的名称相同,并且它们没有被调用。请将其命名为其他名称,它就会工作

我不确定这里发生了什么。我的代码实际上使用的是无效的名称,但我不明白为什么,更重要的是,我不确定这个错误的命名是否会导致任何副作用


有人能看出我是否忽略了一些显而易见的东西吗?我在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); }
    }
   ...
}