DependencyProperty и WPF Designer - PullRequest
       5

DependencyProperty и WPF Designer

4 голосов
/ 22 сентября 2010
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;
        }
    }
}

Почему, когда я обновляю координаты "myLine" в конструкторе WPF (VS 2010), он не обновляет их автоматически (в реальном времени)?

При использовании WPF-объектов Line по умолчанию они автоматически обновляются при изменении (редактировании) кода XAML в представлении XAML / Design.

1 Ответ

6 голосов
/ 22 сентября 2010

Поскольку эти свойства влияют на рендеринг, вы должны указать его в метаданных:

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

Я не уверен, что дизайнеру будет достаточно учесть это, но попробовать стоит ...

...