Достъп до свойства на клас в 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“.

Какво мога да направя, за да направя този имот достъпен?

РЕДАКТИРАНЕ: Опитах също да създам 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)>, но това изглежда не направи нищо.

Някаква представа какво правя грешно?


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