我需要在画布上画矩形。我知道怎么画画。但我没能做到这一点会画上360度
举例说明。蓝色,淡紫色,绿色,它们是一个相同的矩形,我改变了颜色,例如红点是开始位置的矩形。
编辑:
我的行为:
LeftMouseDown in x=50;y=50 (按) MoveMouse to 100;100 -现在可以将MoveMouse调到30;150或MoveMouse调到10;10 -现在我不能这样做,但我需要它
发布于 2011-05-19 22:58:51
除非你需要一个旋转的矩形,否则我不会费心使用变换。只需将Left和Top设置为最小x和y,将width设置为max-x和height maxy-y。
<Canvas x:Name="canvas" MouseDown="Canvas_MouseDown" MouseMove="Canvas_MouseMove" MouseUp="Canvas_MouseUp" Background="Transparent" />
private Point startPoint;
private Rectangle rect;
private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
startPoint = e.GetPosition(canvas);
rect = new Rectangle
{
Stroke = Brushes.LightBlue,
StrokeThickness = 2
};
Canvas.SetLeft(rect,startPoint.X);
Canvas.SetTop(rect,startPoint.Y);
canvas.Children.Add(rect);
}
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if(e.LeftButton == MouseButtonState.Released || rect == null)
return;
var pos = e.GetPosition(canvas);
var x = Math.Min(pos.X, startPoint.X);
var y = Math.Min(pos.Y, startPoint.Y);
var w = Math.Max(pos.X, startPoint.X) - x;
var h = Math.Max(pos.Y, startPoint.Y) - y;
rect.Width = w;
rect.Height = h;
Canvas.SetLeft(rect, x);
Canvas.SetTop(rect, y);
}
private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
{
rect = null;
}
发布于 2011-05-19 22:37:50
步骤:
此流程将允许您单击(设置矩形的一个角),拖动并释放以设置对角点,移动鼠标以旋转矩形,并单击以固定矩形。
使用RenderTransform放置和旋转矩形:这将比在矩形上设置边距或Canvas.Left容易得多。
如果你需要帮助,请告诉我。
发布于 2011-05-19 22:50:27
你不需要这样旋转--只需根据鼠标位置调整矩形的高度、宽度和左上角即可。
这对你来说可能是一个很好的起点:
XAML:
<Canvas x:Name="MyCanvas"
Background="White"
IsHitTestVisible="True"
MouseDown="Canvas_MouseDown"
MouseMove="Canvas_MouseMove"
MouseUp="Canvas_MouseUp">
</Canvas>
背后的代码:
private bool _mouseDown = false;
private Rectangle _current;
private Point _initialPoint;
private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
_mouseDown = (e.ButtonState == MouseButtonState.Pressed)
&& (e.ChangedButton == MouseButton.Left);
if (!_mouseDown)
return;
_current = new Rectangle();
_initialPoint = e.MouseDevice.GetPosition(MyCanvas);
_current.Fill = new SolidColorBrush(Colors.Blue);
MyCanvas.Children.Add(_current);
}
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if (!_mouseDown)
return;
Point position = e.MouseDevice.GetPosition(MyCanvas);
_current.SetValue(Canvas.LeftProperty,
Math.Min(position.X, _initialPoint.X));
_current.SetValue(Canvas.TopProperty,
Math.Min(position.Y, _initialPoint.Y));
_current.Width = Math.Abs(position.X - _initialPoint.X);
_current.Height = Math.Abs(position.Y - _initialPoint.Y);
}
private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
_mouseDown = false;
}
https://stackoverflow.com/questions/6059894
复制相似问题