Доступ к свойствам класса в xaml

В настоящее время я создал класс ниже. По какой-то причине я не могу получить доступ к свойствам, которые я создал с помощью моего стиля xaml.

Public Class Ribbon : Inherits Button
    Private mpopDropdown As Popup

    Public Property Dropdown() As Popup
        Get
            Return mpopDropdown
        End Get
        Set(ByVal value As Popup)
            mpopDropdown = value
        End Set
    End Property

    ...

End Class


<Style TargetType="{x:Type s:Ribbon}">
    <Setter Property="Ribbon.Dropdown">

В этот момент возникает ошибка «Неверное значение PropertyDescriptor».

Что я могу сделать, чтобы сделать это свойство доступным?

EDIT: я также пытался создать DependencyProperty, поскольку я читал, что это может решить мою проблему, но, похоже, это не так.

EDIT 2: я пытался

Public Shared Readonly DropdownProperty as DependencyProperty = _
    DependencyProperty.Register("Dropdown",GetType(Popup),GetType(Ribbon), _
    New FrameworkPropertyMetadata(False))

а также

Public Shared Readonly DropdownProperty as DependencyProperty = _
    DependencyProperty.Register("Dropdown",GetType(Popup),GetType(Ribbon), _
    New FrameworkPropertyMetadata(True))

но они, похоже, тоже не раскрывают собственность. Я также пометил свойство как <Bindable(True)>, но, похоже, это ничего не дало.

Любая подсказка, что я делаю неправильно?


person Seth Moore    schedule 18.02.2010    source источник


Ответы (2)


Свойства зависимости действительно должны решить вашу проблему. И не забывайте о пространстве имен, то есть <Setter Property="s:Ribbon.Dropdown">, хотя вам не нужно указывать владельца класса для свойств в установщике, если вы указали TargetType. Это означает, что вы можете написать <Setter Property="Dropdown">

PS: Вы также можете столкнуться с другой проблемой при настройке визуальных эффектов через стили. Подробнее. Но это другая история...

person Anvaka    schedule 18.02.2010

В итоге я просто создал отдельный стиль всплывающего окна и установил стиль моего объекта в коде класса и установил всплывающее окно PlacementTarget = Me.

person Seth Moore    schedule 18.02.2010