2011-04-08 92 views
2

是否有可能为多个控件创建一个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解决方案,它不涉及每个控件的子类化。

在此先感谢。

回答

2

你确定你正在使用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的实例。

+0

哦,我的。当然,这在我的代码中完全是无稽之谈。非常感谢。 :) – Amenti 2011-04-08 11:10:23

相关问题