2010-09-22 86 views
4
class MyLine : Shape { 
    public static readonly DependencyProperty X11Property; 
    public static readonly DependencyProperty X22Property; 
    public static readonly DependencyProperty Y11Property; 
    public static readonly DependencyProperty Y22Property; 

    static MyLine() { 
     X11Property = DependencyProperty.Register("X11", typeof(double), typeof(MyLine), new UIPropertyMetadata(double.NaN)); 
     X22Property = DependencyProperty.Register("X22", typeof(double), typeof(MyLine), new UIPropertyMetadata(double.NaN)); 
     Y11Property = DependencyProperty.Register("Y11", typeof(double), typeof(MyLine), new UIPropertyMetadata(double.NaN)); 
     Y22Property = DependencyProperty.Register("Y22", typeof(double), typeof(MyLine), new UIPropertyMetadata(double.NaN)); 
    } 

    [TypeConverter(typeof(LengthConverter))] 
    public double X11 { get { return (double)GetValue(X11Property); } set { SetValue(X11Property, value); } } 
    [TypeConverter(typeof(LengthConverter))] 
    public double X22 { get { return (double)GetValue(X22Property); } set { SetValue(X22Property, value); } } 
    [TypeConverter(typeof(LengthConverter))] 
    public double Y11 { get { return (double)GetValue(Y11Property); } set { SetValue(Y11Property, value); } } 
    [TypeConverter(typeof(LengthConverter))] 
    public double Y22 { get { return (double)GetValue(Y22Property); } set { SetValue(Y22Property, value); } } 

    protected override System.Windows.Media.Geometry DefiningGeometry { 
     get { 
      var geometryGroup = new GeometryGroup(); 

      // Add line 
      geometryGroup.Children.Add(new LineGeometry(new Point(X11, Y11), new Point(X22, Y22))); 
      return geometryGroup; 
     } 
    } 
} 

为什么当我更新WPF设计器(VS 2010)中的“myLine”坐标时,它不会自动更新它(实时)?DependencyProperty和WPF设计器

当使用默认的“Line”WPF对象时,它们在XAML代码在XAML/Design视图中被更改(编辑)时自动更新。

回答

6

因为这些属性会影响渲染,你应该在元数据中指定:

X11Property = DependencyProperty.Register("X11", typeof(double), typeof(DirectionLine), new FrameworkPropertyMetadata(double.NaN, FrameworkPropertyMetadataOptions.AffectsRender)); 

我不知道这将是足够的设计者考虑到这一点,但它是值得一试..

+0

...很酷。工作。谢谢! – serhio 2010-09-22 15:01:07