WPF: не удается получить пользовательское вложенное свойство для работы в качестве свойства триггера - PullRequest
3 голосов
/ 29 июня 2010

Итак, у меня есть класс, который выглядит так:

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 ]

4 голосов
/ 29 июня 2010

Нашел ответ, как только я разместил вопрос.Я публикую ответ, чтобы помочь всем, кто столкнулся с той же проблемой. Отметьте свой класс как общедоступный .Не уверен, является ли это умышленно или нет, но похоже, что они могли бы по крайней мере улучшить сообщение об ошибке здесь.

0 голосов
/ 27 октября 2015

Похоже, что-то вроде этого волшебным образом исправлено установкой «объекта запуска» в свойствах проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...