Итак, у меня есть класс, который выглядит так:
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
. Кто-нибудь видит в чем проблема?