【发布时间】:2015-04-16 19:53:56
【问题描述】:
我在访问自定义 WPF 控件中的标签时遇到问题。我已经实现了 PropertyChangedCallback 但从那里我无法访问该类。 该类是一个带有标签 (Name="lblDataName") 的简单控件,我想更改文本以匹配 DataName 属性。 下面是代码:
Public Class DataNameControl
Public Property DataName As String
Get
Return GetValue(DataNameProperty)
End Get
Set(ByVal value As String)
SetValue(DataNameProperty, value)
End Set
End Property
Public Shared ReadOnly DataNameProperty As DependencyProperty = _
DependencyProperty.Register("DataName", _
GetType(String), GetType(GraphData), _
New PropertyMetadata("KPI", AddressOf OnDataNameChanged))
Public Shared Function OnDataNameChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs) As String
Dim dnc As DataNameControl = CType(d, DataNameControl)
dnc.lblDataName.Text = e.NewValue.ToString
'' I want to access the lable on my class right here.
Return e.NewValue.ToString
End Function
End class
我希望在 XAML 中设置该属性会相应地更新标签,但是 nada!
<Controls:DataNameControl DataName="BCWP" Margin="0"/>
关于如何更改属性本身有很多答案,但似乎没有一个专门回答这个问题,如果在这个问题上修修补补了 20 个小时。是时候寻求帮助了!
【问题讨论】:
-
Register 的第三个参数错误。它必须是
GetType(DataNameControl)而不是GetType(GraphData)。演员CType(d, DataNameControl)应该可以工作。但是,PropertyChangedCallback 不返回值,因此(据我了解 VB)它应该是 Sub,而不是 Function。您还应该显示lblDataName的声明位置以及它在 DataNameControl 中的显示方式。 -
太棒了!!!!就是这样。我已将这部分课程从另一个课程移过来,错过了在注册中更改课程名称!谢谢吨@Clemens
标签: wpf vb.net xaml dependency-properties