我在自定义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个小时的修补。时间寻求帮助!
答案 0 :(得分:1)
Register方法的第三个参数是错误的。它必须是GetType(DataNameControl)
而不是GetType(GraphData)
:
Public Shared ReadOnly DataNameProperty As DependencyProperty = _
DependencyProperty.Register( _
"DataName", GetType(String), GetType(DataNameControl), _
New PropertyMetadata("KPI", AddressOf OnDataNameChanged))
PropertyChangedCallback不应返回值:
Public Shared Sub OnDataNameChanged( _
ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim dnc As DataNameControl = CType(d, DataNameControl)
...
End Sub
答案 1 :(得分:1)
新手(像我一样),
如果您正在阅读本文寻找问题的解决方案,那么这里的主要教训是,&#34;确保您将正确的参数传递给您的财产注册。&#34; VS小部件将帮助您完成整个过程,但只是第一次,之后,如果您更改类的名称,VS不会自动更改注册中的类 - 这是我的问题的根源
这是一个基于VS2013添加的小部件代码的通用示例:
Public Shared ReadOnly Prop1Property As DependencyProperty = _
DependencyProperty.Register("Prop1", _
GetType(String), GetType(Window1), _
New PropertyMetadata(Nothing))
Prop1Property 是您的媒体资源名称加上后缀属性。
&#34; Prop1&#34; 是该属性名称。
第一个 GetType(String)是变量类型是您的属性的类型。 VS输入字符串作为默认值。
第二个 GetType(Window1)只是您的媒体资源所在的类。 VS进入&#34; Window1&#34;作为默认值。这可能永远不会更正,并且它与小部件中的任何其他内容都没有关联,因此您必须自己更改它。我简单地说,但这是我搞砸的地方。
新的PropertyMetadata 有6次重载,具体取决于您计划如何处理属性值。
在这种情况下,&#34; Nothing&#34; 明确指出默认值为空。 选项包括默认值,属性更改回调,CoerceValueCallback和IsValidValueCallback。所有这一切都有点超越,我的问题。我必须弄清楚我们的代码是否有效,所以如果有人有问题,请回复,我可能会添加一些信息。
如果您不熟悉依赖属性,这两个10分钟的视频。
Youtube: WPF Tutorial 21 - Dependency Properties
它们非常简单,足以让您启动并运行。