Доступ к свойствам класса в xaml - PullRequest
0 голосов
/ 18 февраля 2010

В настоящее время я создал класс ниже. По какой-то причине я не могу получить доступ к свойствам, которые я создал через мой стиль 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».

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

РЕДАКТИРОВАТЬ: Я также пытался создать DependencyProperty, поскольку я прочитал, что это может решить мою проблему, но это не похоже.

РЕДАКТИРОВАТЬ 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)>, но это, похоже, ничего не делает.

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

Ответы [ 2 ]

1 голос
/ 18 февраля 2010

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

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

0 голосов
/ 18 февраля 2010

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

...