Search code examples
silverlightdependency-propertiesattached-properties

Silverlight: How to add a Dependency Property to multiple controls?


Is it possible to create a Dependency Property for multiple controls without resorting to subclass every one of it?

I thought about using Attached Properties but they nest only one level deep as far as I understand it.

I want something like this to be possible:

<!-- 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>

This won't work since the Attached Properties wouldn't be found in the TextBox since it's no direct descendent of MyDataGrid.

Background is that I try to automatically convert an old Xaml-like Gui-syntax into real Xaml and with the old system it was possible to set different sources and targets for changed data. Now I'm searching for a Xaml-solution that doesn't involve subclassing every control there is.

Thanks in advance.


Solution

  • are you sure you are using Attached property correctly?

    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);
            }
    

    This worked for me.Though SetSourceData was not get called, but data was there. To retrive data.

    MyDataGrid.GetSourceData(tbox);
    

    Where tbox is the instance of your TextBox.