C# 如何绘制移动轴工作台

C# 如何绘制移动轴工作台,c#,wpf,C#,Wpf,我试图从代码隐藏中在WPF中绘制一个轴表x-y;我想给它一个拖放选项,可以看到更多的轴表。 我已经创建了静态轴,但我不知道如何创建动态轴? 有人能帮我做这件事吗? 谢谢 这应该让你开始。向主轴和轴添加事件处理程序- 添加以下方法- Line _selectedAxis = null; private void CanGraph_MouseMove(object sender, MouseEventArgs e) { if (_selectedAxis !

我试图从代码隐藏中在WPF中绘制一个轴表x-y;我想给它一个拖放选项,可以看到更多的轴表。 我已经创建了静态轴,但我不知道如何创建动态轴? 有人能帮我做这件事吗? 谢谢


这应该让你开始。向主轴和轴添加事件处理程序-

添加以下方法-

    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
            ...
        }