Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在简单线上调整装饰器的大小?_.net_Wpf_Resize_Line_Adorner - Fatal编程技术网

.net 在简单线上调整装饰器的大小?

.net 在简单线上调整装饰器的大小?,.net,wpf,resize,line,adorner,.net,Wpf,Resize,Line,Adorner,WPF有很多调整大小的装饰器示例,但我还没有找到一个适合与简单线条一起使用的示例。。。显然,我希望控制点显示在线条的末端,而不是围绕线条形成一个矩形。有人遇到过这样的事情吗 我的线条装饰器实现,您可以移动起点和终点,也可以移动线条(当前已注释) 以下是模型对象: public class LineItem : NotifyObject { private Point startPoint; private Point endPoint; public Point Sta

WPF有很多调整大小的装饰器示例,但我还没有找到一个适合与简单线条一起使用的示例。。。显然,我希望控制点显示在线条的末端,而不是围绕线条形成一个矩形。有人遇到过这样的事情吗

我的线条装饰器实现,您可以移动起点和终点,也可以移动线条(当前已注释)

以下是模型对象:

public class LineItem : NotifyObject
{
    private Point startPoint;
    private Point endPoint;

    public Point StartPoint
    {
        get
        {
            return startPoint;
        }
        set
        {
            if (startPoint != value)
            {
                startPoint = value;
                OnPropertyChanged("StartPoint");
            }
        }
    }

    public Point EndPoint
    {
        get
        {
            return endPoint;
        }
        set
        {
            if (endPoint != value)
            {
                endPoint = value;
                OnPropertyChanged("EndPoint");
            }
        }
    }
}

public class NotifyObject : INotifyPropertyChanged
{
    protected virtual void OnPropertyChanged(string propertyChanged)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyChanged));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}
class SnapToGrid
{
    private Size gridSizeModeCreate = new Size(13.5, 13.5);
    private Size gridSizeModeMove = new Size(13.5, 13.5);
    private double gridOffsetX = -1.0;
    private double gridOffsetY = -1.0;

    public enum SnapMode
    {
        Create,
        Move,
        Line
    }

    public Size GridSizeModeCreate
    {
        get { return gridSizeModeCreate; }
        set
        {
            gridSizeModeCreate = value;
        }
    }

    public Size GridSizeModeMove
    {
        get { return gridSizeModeMove; }
        set
        {
            gridSizeModeMove = value;
        }
    }

    public double GridOffsetX
    {
        get { return gridOffsetX; }
        set
        {
            gridOffsetX = value;
        }
    }

    public double GridOffsetY
    {
        get { return gridOffsetY; }
        set
        {
            gridOffsetY = value;
        }
    }

    private Point Calculate(Point p, Size s)
    {
        double snapX = p.X + ((Math.Round(p.X / s.Width) - p.X / s.Width) * s.Width);
        double snapY = p.Y + ((Math.Round(p.Y / s.Height) - p.Y / s.Height) * s.Height);

        return new Point(snapX + gridOffsetX, snapY + gridOffsetY);
    }

    public Point Snap(Point p, SnapMode mode)
    {
        if (mode == SnapMode.Create)
            return Calculate(p, gridSizeModeCreate);
        else if (mode == SnapMode.Move)
            return Calculate(p, gridSizeModeMove);
        else
            return new Point(0, 0);
    }
}
public class LineItem : NotifyObject
{
    private Point startPoint;
    private Point endPoint;

    public Point StartPoint
    {
        get
        {
            return startPoint;
        }
        set
        {
            if (startPoint != value)
            {
                startPoint = value;
                OnPropertyChanged("StartPoint");
            }
        }
    }

    public Point EndPoint
    {
        get
        {
            return endPoint;
        }
        set
        {
            if (endPoint != value)
            {
                endPoint = value;
                OnPropertyChanged("EndPoint");
            }
        }
    }
}

public class NotifyObject : INotifyPropertyChanged
{
    protected virtual void OnPropertyChanged(string propertyChanged)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyChanged));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}