C# 如何绘制移动轴工作台
我试图从代码隐藏中在WPF中绘制一个轴表x-y;我想给它一个拖放选项,可以看到更多的轴表。 我已经创建了静态轴,但我不知道如何创建动态轴? 有人能帮我做这件事吗? 谢谢C# 如何绘制移动轴工作台,c#,wpf,C#,Wpf,我试图从代码隐藏中在WPF中绘制一个轴表x-y;我想给它一个拖放选项,可以看到更多的轴表。 我已经创建了静态轴,但我不知道如何创建动态轴? 有人能帮我做这件事吗? 谢谢 这应该让你开始。向主轴和轴添加事件处理程序- 添加以下方法- Line _selectedAxis = null; private void CanGraph_MouseMove(object sender, MouseEventArgs e) { if (_selectedAxis !
这应该让你开始。向主轴和轴添加事件处理程序- 添加以下方法-
Line _selectedAxis = null;
private void CanGraph_MouseMove(object sender, MouseEventArgs e)
{
if (_selectedAxis != null)
{
var line = _selectedAxis;
var pos = e.GetPosition(line);
textBlock.Text = $"({pos.X}, {pos.Y})";
line.Y1 = pos.Y;
line.Y2 = pos.Y;
}
}
private void CanGraph_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
_selectedAxis = null;
}
private void A_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var line = sender as Line;
_selectedAxis = line;
}
现在按住主水平轴并拖动它
您也可以对垂直轴执行相同的操作
用于缩放
使用ScaleTransform初始化canGraph.RenderTransform并订阅鼠标滚轮事件。注意:RenderTransferMorigin设置为0.5,0.5从中心缩放,而不是从左上角默认值-
canGraph.RenderTransformOrigin = new Point(0.5, 0.5);
canGraph.RenderTransform = new ScaleTransform();
canGraph.MouseWheel += CanGraph_MouseWheel;
而该功能—
private void CanGraph_MouseWheel(object sender, MouseWheelEventArgs e)
{
var transform = canGraph.RenderTransform as ScaleTransform;
var factor = transform.ScaleX;
factor += (e.Delta > 0 ? 1 : (factor == 1 ? 0 : -1));
transform.ScaleX = factor;
transform.ScaleY = factor;
}
我猜您已经添加了线型对象来绘制轴,然后将其提供给窗口内容。 然后只需添加事件,如MouseLeftButtonDown事件或MouseMove事件。添加适当的方法。 在MouseMove事件上更改对象位置,如: 为了某一行
private void MouseMoveMethod(object sender, MouseEventArgs e)
{
var obj = sender as Line;
obj.X1 = e.GetPosition(this).X; //Line start x coordinate
obj.Y1 = e.GetPosition(this).Y; //Line start y coordinate
...
}
你能分享一下你到目前为止所做的吗?@GauravMathur给你。非常感谢。顺便问一下,你能帮我用鼠标滚动放大和缩小吗?更新了我用鼠标滚轮放大的答案。快乐编码:
private void CanGraph_MouseWheel(object sender, MouseWheelEventArgs e)
{
var transform = canGraph.RenderTransform as ScaleTransform;
var factor = transform.ScaleX;
factor += (e.Delta > 0 ? 1 : (factor == 1 ? 0 : -1));
transform.ScaleX = factor;
transform.ScaleY = factor;
}
private void MouseMoveMethod(object sender, MouseEventArgs e)
{
var obj = sender as Line;
obj.X1 = e.GetPosition(this).X; //Line start x coordinate
obj.Y1 = e.GetPosition(this).Y; //Line start y coordinate
...
}