WPF:集合DependencyProperty不能“添加”静态

时间:2011-03-18 13:08:19

标签: wpf collections dependency-properties

我创建了一个依赖属性,它是一个依赖属性数组。我想以这种方式在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时存在一些问题,因为如果我尝试在纯xaml中添加DepenedencyPropery,它可以工作(虽然它不起作用,因为没有空的构造函数)。另一个奇怪的事情:如果我将该属性声明为一个可观察的对象集合,我首先添加一个虚拟对象!即:

<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 个答案:

答案 0 :(得分:2)

它尝试将属性设置为给定对象,而不是将项添加到集合中。所以,你应该做这样的事情:

<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>
{
}