在xaml中访问类属性

时间:2010-02-18 15:17:06

标签: .net wpf vb.net wpf-controls

我目前在下面创建了这个类。出于某种原因,虽然我无法访问我通过我的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 个答案:

答案 0 :(得分:1)

依赖属性应该确实解决您的问题。并且不要忘记命名空间即<Setter Property="s:Ribbon.Dropdown">,尽管如果指定了TargetType,则不必在setter中为属性指定类所有者。这意味着你可以写<Setter Property="Dropdown">

PS:您可能还会遇到通过样式设置视觉效果的另一个问题。 Read more。但那是另一个故事......

答案 1 :(得分:0)

我最后只是创建了一个单独的Popup样式,并在类的代码中设置了我的对象的样式,并设置了Popup的PlacementTarget = Me