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

时间:2010-06-29 14:30:27

标签: c# wpf xaml

所以我有一个看起来像这样的课程:

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>

(上面的控制模板假设MyAssembly包含MyClass的正确xmlns:my="clr-namespace:MyAssembly"在封闭的XAML文件中)

这是我的麻烦:当我这样做时,它编译得很好。但是,当我尝试在设计器中看到此控件模板时,它会抱怨Cannot find the 'IsSomething' template property on type 'System.Windows.Controls.TreeViewItem'.并且设计器不会加载。

我已尝试RegisterAttached覆盖MyClass以及TreeViewItem作为所有者类型,但都没有解决此问题。我还在AttachedPropertyBrowsableForType上使用GetIsSomething属性进行了尝试。有谁看到问题是什么?

2 个答案:

答案 0 :(得分:4)

我在发布问题后立即找到答案。我正在发布答案,以帮助任何遇到同样问题的人。 标记您的课程。不确定这是否是设计的,但似乎它们至少可以改善这里的错误信息。

希望这有助于某人。

答案 1 :(得分:0)

通过在项目的属性中设置“启动对象”,可以神奇地修复这样的事情。