所以我有一个看起来像这样的课程:
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
属性进行了尝试。有谁看到问题是什么?
答案 0 :(得分:4)
我在发布问题后立即找到答案。我正在发布答案,以帮助任何遇到同样问题的人。 标记您的课程。不确定这是否是设计的,但似乎它们至少可以改善这里的错误信息。
希望这有助于某人。
答案 1 :(得分:0)
通过在项目的属性中设置“启动对象”,可以神奇地修复这样的事情。