Silverlight: Как добавить свойство зависимости в несколько элементов управления? - PullRequest
2 голосов
/ 08 апреля 2011

Можно ли создать свойство зависимости для нескольких элементов управления, не прибегая к подклассу каждого из них?

Я думал об использовании Attached Properties, но, насколько я понимаю, они вложены только на один уровень глубиной.

Я хочу, чтобы что-то подобное было возможно:

<!-- 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-решение, которое не включает создание подклассов для каждого существующего элемента управления.

Заранее спасибо.

1 Ответ

2 голосов
/ 08 апреля 2011

вы уверены, что используете свойство 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.

...