代码之家  ›  专栏  ›  技术社区  ›  FMM

WPF:无法获取自定义附加属性以用作触发器属性

  •  3
  • FMM  · 技术社区  · 16 年前

    所以我有一个类,看起来像这样:

    internal class MyClass
    {
        public static readonly DependencyProperty IsSomethingProperty =
                DependencyProperty.RegisterAttached(
                    "IsSomething", // property name
                    typeof(bool), // property type
                    typeof(MyClass), // owner type
                    new FrameworkPropertyMetadata(false)
                    );
    
        public static void SetIsSomething(DependencyObject obj, bool value)
        {
            obj.SetValue(IsSomethingProperty, value);
        }
    
        [AttachedPropertyBrowsableForType(typeof(TreeViewItem))]        
        public static bool GetIsSomething(DependencyObject obj)
        {
            return (bool)obj.GetValue(IsSomethingProperty);
        }
    }
    

    我希望能够将此附加属性用作控件模板中的触发器属性,如下所示:

    <ControlTemplate TargetType="TreeViewItem">
        <!-- stuff here omitted for brevity -->
        <Trigger Property="my:MyClass.IsSomething" Value="True">
            <!-- setters for when IsSomething is True -->
        </Trigger>
    </ControlTemplate>
    

    (上述控制模板假定 xmlns:my="clr-namespace:MyAssembly" 其中myassembly包含myclass在封闭的xaml文件中)

    这是我的问题:当我这样做的时候,它编译得很好。但是,当我试图在设计器中看到这个控件模板的实际应用时,它会抱怨 Cannot find the 'IsSomething' template property on type 'System.Windows.Controls.TreeViewItem'. 设计师不会加载。

    我试过了 RegisterAttached 重写 MyClass 以及 TreeViewItem 作为所有者类型,两者都不修复此问题。我也试过了,有没有 AttachedPropertyBrowsableForType 属性对 GetIsSomething . 有人看到问题了吗?

    2 回复  |  直到 10 年前
        1
  •  4
  •   FMM    16 年前

    我一发布问题就找到了答案。我发布答案是为了帮助任何遇到同一问题的人。 将你的班级标记为公共 . 不确定这是不是设计的,但他们似乎至少可以改善这里的错误信息。

    希望这能帮助别人。

        2
  •  0
  •   Mikhail Orlov    10 年前

    通过在项目属性中设置“启动对象”,神奇地修复了类似的问题。