2012-04-02 113 views
0

专家,无法通过样式设置DependencyProperty值

我写了一个名为“DimensionLine”的自定义Shape,用于我的UI中的各个位置。形状由两端各有一个箭头的线组成。它工作正常,但其中一个依赖项属性不能通过样式设置,我只是无法弄清楚我做错了什么。

这是代码为预计将无法正常工作的零件:

public class DimensionLine : Shape 
{ 
    public static readonly DependencyProperty ArrowsSizeProperty = 
     DependencyProperty.Register("ArrowsSize", typeof(Size), typeof(DimensionLine), 
      new FrameworkPropertyMetadata(new Size(10, 10), 
       FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsMeasure, 
       debug)); <-- I added this to listen for changes to the property ... 

    private static void debug(DependencyObject dObj, DependencyPropertyChangedEventArgs e) 
    { 
     // ERROR! this code never receives value from the Style. Why? 
    } 

    public Size ArrowsSize 
    { 
     get { return (Size) GetValue(ArrowsSizeProperty); } 
     set { SetValue(ArrowsSizeProperty, value); } 
    } 
} 

XAML:

<MyXaml.Resources> 
    <Style x:Key="SmallDimensionLine" TargetType="{x:Type cc:DimensionLine}" BasedOn="{StaticResource DimensionLine}"> 
     <Setter Property="ArrowsSize" Value="4,1.5" /> 
    </Style> 
</MyXaml.Resources> 

只是为了确保我添加了一个回调侦听器依赖项属性元数据并通过断点进行调试,但通过样式指定的值不会写入它。

是否还有其他需要完成的d-属性使其变得更加符合样式?

感谢

回答

1

你错过创建一个新的WPF自定义控件

static DimensionLine() 
{ 
    DefaultStyleKeyProperty.OverrideMetadata(typeof(DimensionLine), 
     new FrameworkPropertyMetadata(typeof(DimensionLine))); 
} 
+0

添加该行代码到构造并没有帮助我害怕的时候,通常会自动添加静态构造函数。另外,它不是从Shape派生的CustomControl。也许这是为什么?显然我需要阅读这个。不管怎么说,还是要谢谢你。 – 2012-04-03 06:35:28

相关问题