Silverlight:如何将一个Dependency属性添加到多个控件?
问题描述:
是否有可能为多个控件创建一个Dependency属性,而无需诉诸每个子类的子类?Silverlight:如何将一个Dependency属性添加到多个控件?
我想过使用附加属性,但是据我了解,它们只嵌套一层。
我想这样的事情成为可能:
<!-- MyDataGrid implements the new Attached Properties SourceData and TargetData -->
<MyDataGrid>
<StackPanel>
<TextBox MyDataGrid.SourceData="{Binding Somewhere}" MyDataGrid.TargetData="{Binding Somewhere}" />
</StackPanel>
<CheckBox MyDataGrid.SourceData="{Binding Somewhere}" MyDataGrid.TargetData="{Binding Somewhere}" />
</MyDataGrid>
这不会起作用,因为附加属性不会在TextBox中找到,因为它是MyDataGrid没有直系后裔。
背景是,我尝试自动将旧的类似Xaml的Gui语法转换为真正的Xaml,并且使用旧系统可以为更改的数据设置不同的源和目标。现在我正在寻找一种Xaml解决方案,它不涉及每个控件的子类化。
在此先感谢。
答
你确定你正在使用Attached属性吗?
public static readonly DependencyProperty SourceDataProperty = DependencyProperty.RegisterAttached(
"SourceData", typeof (string), typeof (MyDataGrid), new PropertyMetadata("test"));
public static void SetSourceData(DependencyObject obj, string sourceData)
{
obj.SetValue(SourceDataProperty, sourceData);
}
public static string GetSourceData(DependencyObject obj)
{
return (string) obj.GetValue(SourceDataProperty);
}
这对我有效。虽然SetSourceData没有被调用,但数据在那里。 检索数据。
MyDataGrid.GetSourceData(tbox);
其中tbox是TextBox的实例。
哦,我的。当然,这在我的代码中完全是无稽之谈。非常感谢。 :) – Amenti 2011-04-08 11:10:23