我正在为Windows Phone 8开发一个自定义控件,它源自ItemsControl
,将有许多子对象(另一个自定义类)。它需要有一个附加属性IsMinonAxis
,它应该只由一个孩子设置一次,而不是一次。所以下面的代码将是我想要避免的问题。
<WPGraphControl:GraphControl>
<WPGraphControl:GraphLine GraphDataPoints="{Binding SpeedPoints}" WPGraphControl:GraphControl.IsMinonAxis="True" />
<WPGraphControl:GraphLine GraphDataPoints="{Binding AltitudePoints}" WPGraphControl:GraphControl.IsMinonAxis="True" />
</WPGraphControl:GraphControl>
问题是附加属性附加到子控件,而不附加到父控件。
在PropertyCHangedCallback
(作为RegisterAttached
的一部分注册为PropertyMetadata
)中,我可以获取正在设置属性的子对象,但我无法访问实际控件实例(this
)能够将整个子控件集合作为其所有实例中通用的静态方法进行验证。
我想的一个选项是在添加子控件时附加另一个附加属性(内部),然后使用该属性在回调中获取父级,并激活验证逻辑。这听起来像是一个过于复杂的逻辑。
您能否建议处理这类情况的最佳方法是什么?
答案 0 :(得分:0)
可能更容易在GraphControl上使用一个非附加属性,该属性需要使用Element。自从我做了WinPhone XAML以来已经有一段时间了,但是在WPF中这看起来像是:
<wpgc:GraphControl MinorAxis="{Binding ElementName=Foo}">
<wpgc:GraphLine x:Name="Foo" />
<wpgc:GraphLine x:Name="Bar" />
</wpgc:GraphControl>
由于您只能为属性分配单个值,因此这将确保只设置一个值。