无法使用附加属性解析属性路径中的所有属性引用

时间:2014-02-05 15:35:46

标签: c# wpf xaml properties storyboard

我正在努力使用xaml在故事板中的其他项目中设置附加属性。

在文本框的样式中,我有一个eventtrigger,它应该在事件发生后将附加属性设置为true。

XAML:

xmlns:MyNamespace="clr-namespace:Project.Utilities"

<EventTrigger RoutedEvent="SomeEvent">
   <BeginStoryboard>
      <Storyboard>
         <BooleanAnimationUsingKeyFrames
            Storyboard.TargetProperty="MyNamespace:MyClass.MyAttachedProperty">
            <DiscreteBooleanKeyFrame Value="True" />
         </BooleanAnimationUsingKeyFrames>
      </Storyboard>
   </BeginStoryboard>
</EventTrigger>

C#:

namespace MyNamespace
{
   public static class MyClass
   {
      public static readonly DependencyProperty MyAttachedPropertyProperty
         = DependencyProperty.RegisterAttached("MyAttachedProperty", typeof(bool), 
           typeof(MyClass), new UIPropertyMetadata(false));

      public static void SetMyAttachedProperty(DependencyObject target, bool value)
      {
        target.SetValue(MyAttachedPropertyProperty, value);
      }

      public static bool GetMyAttachedProperty(DependencyObject target)
      {
        return (bool)target.GetValue(MyAttachedPropertyProperty);
      }
   }
}

使用PropertyPath我就像在here中所描述的那样。 但我总是得到一个'System.InvalidOperationException': 附加信息:无法解析属性路径“MyNamespace:MyClass.MyAttachedProperty”中的所有属性引用。验证适用的对象是否支持属性。

我尝试了几种不同的方法来编写带括号的路径而没有它们但老实说我不太明白如何定义路径它甚至不能在MSDN Post的帮助下

有没有人知道我还可以尝试访问所附属性?

提前致谢!

1 个答案:

答案 0 :(得分:1)

从您链接到的网页的英文版本的附加属性部分Property Path Syntax

附属物

<object Path="...(ownerType.propertyName)..." ... />
  

括号表示PropertyPath中的此属性应使用部分限定来构造,因为它需要后期绑定上下文信息,例如应用于应用模板的类型。 它可以使用XAML命名空间的前缀用法来查找类型。 ownerType根据xmlns映射搜索XAML处理器可以访问的类型(如果不合格,则使用默认的XAML命名空间)。 propertyName必须解析为ownerType上存在的属性的名称。

我已经突出显示了一个部分,说明可以使用前缀,这样可以将示例转换为:

<object Path="...(namespacePrefix:ownerType.propertyName)..." ... />

此外,在链接页面的底部,Raphael Schweizer还增加了一个社区:

  
    

动画中自定义DP的属性路径不起作用

         

应该注意,附加属性的属性路径语法仅适用于MS附加属性,但不适用于     自定义附加属性。

         

答案

         

可以使用自定义附加属性

         

•XAMLPath =(命名空间:CustomOwner.AttachedProperty)

  

如果您尝试了这个并且没有工作,那么您的代码中的其他地方就会出现问题。