4


0

DependencyPropertyとWPFデザイナー
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」座標を更新しても、自動的に(ライブ)更新されないのはなぜですか?

デフォルトの「Line」WPFオブジェクトを使用する場合、XAML /デザインビューでXAMLコードが変更(編集)されると、それらは自動的に更新されます。

1 Answer


6


これらのプロパティはレンダリングに影響するため、メタデータで指定する必要があります。

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

デザイナーがそれを考慮に入れるのに十分かどうかはわかりませんが、試してみる価値はあります…​