WPF: коллекция DependencyProperty не может «добавить» статику - PullRequest
1 голос
/ 18 марта 2011

Я создал свойство зависимости, которое представляет собой массив свойств зависимости. Я хотел бы добавить значения в xaml следующим образом:

<z:Zoomable.UnScale>
                <x:Static Member="Rectangle.StrokeThicknessProperty" ></x:Static>
                <x:Static Member="Ellipse.StrokeThicknessProperty"></x:Static>
</z:Zoomable.UnScale>

но жалуется с этой ошибкой: StrokeThickness не является допустимым значением свойства UnScale.

Свойство определяется следующим образом:

public static readonly DependencyProperty UnScaleProperty =
            DependencyProperty.RegisterAttached("UnScale", typeof(ObservableCollection<DependencyProperty>), typeof(Zoomable), new UIPropertyMetadata(GetPropertyCollection(), new PropertyChangedCallback(OnUnscaledChanged)));

Я подозреваю, что есть некоторая проблема в использовании StaticExtension, потому что, если я пытаюсь добавить DepenedencyPropery в чистый xaml, он работает (хотя он не работает, потому что нет пустого конструктора). Еще одна странная вещь : если я объявляю свойство как наблюдаемую коллекцию объектов и добавляю фиктивный объект, во-первых, он работает! то есть:

<z:Zoomable.UnScale>
                <Button> Any object here </Button>
                <x:Static Member="Rectangle.StrokeThicknessProperty" ></x:Static>
                <x:Static Member="Ellipse.StrokeThicknessProperty"></x:Static>
</z:Zoomable.UnScale>

1 Ответ

2 голосов
/ 18 марта 2011

Он пытается установить свойство для данного объекта вместо добавления элементов в коллекцию.Итак, вы должны делать что-то вроде этого:

<z:Zoomable.UnScale>
   <z:DependencyPropertyCollection>
          <x:Static Member="Rectangle.StrokeThicknessProperty" ></x:Static>
          <x:Static Member="Ellipse.StrokeThicknessProperty"></x:Static>
   </z:DependencyPropertyCollection>
</z:Zoomable.UnScale>

Где z:DependencyPropertyCollection:

public class DependencyPropertyCollection : ObservableCollection<DependencyProperty>
{
}
...