.net 在简单线上调整装饰器的大小?
WPF有很多调整大小的装饰器示例,但我还没有找到一个适合与简单线条一起使用的示例。。。显然,我希望控制点显示在线条的末端,而不是围绕线条形成一个矩形。有人遇到过这样的事情吗 我的线条装饰器实现,您可以移动起点和终点,也可以移动线条(当前已注释) 以下是模型对象:.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
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;
}