【问题标题】:Cannot resolve all property references in the property path with attached property无法解析带有附加属性的属性路径中的所有属性引用
【发布时间】:2014-02-05 15:35:45
【问题描述】:

我正在努力使用 xaml 在情节提要的不同项目中设置附加属性。

在文本框的样式中,我有一个事件触发器,它应该在事件发生后将附加属性设置为 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 的帮助,我也不太明白如何定义路径

有谁知道我还能尝试访问附加的属性吗?

提前致谢!

【问题讨论】:

标签: c# wpf xaml properties storyboard


【解决方案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)

如果您尝试过此操作并且它没有工作,那么您的代码中的其他地方有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-14
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多