【问题标题】:TranslateTransform Not translating linesTranslateTransform 不翻译行
【发布时间】:2017-09-13 16:43:15
【问题描述】:

我一直在尝试通过 TranslateTransform 翻译画布中的网格(2 行数组)。然而,这些台词只是摇晃了一下,又回到了原来的位置,没有翻译。以下是来源:

    private Point mousePosition;
    private bool CanvasMouseDown;

    private void GraphMouseDown(object sender, MouseButtonEventArgs e)
    {
        CanvasMouseDown = true;
    }

    private void GraphMouseMove(object sender, MouseEventArgs e)
    {
        if (CanvasMouseDown)
        {
            var position = e.GetPosition(canvas);
            var offset = position - mousePosition;
            mousePosition = position;

            for (int i = 0; i < GridLinesHoriz.Length; ++i)
            {
                GridLinesHoriz[i].RenderTransform = new TranslateTransform(offset.X, offset.Y);
            }

            for (int i = 0; i < GridLinesVert.Length; ++i)
            {
                GridLinesVert[i].RenderTransform = new TranslateTransform(offset.X, offset.Y);
            }
        }
    }


    private void GraphMouseUp(object sender, MouseButtonEventArgs e)
    {
        CanvasMouseDown = false;
    }

有什么帮助吗?

【问题讨论】:

    标签: c# arrays wpf xaml gridlines


    【解决方案1】:

    问题是您在处理MouseMove 事件时正在规范化偏移量。 TranslateTransform 始终从原始位置转换,因此您需要计算在拖动操作的生​​命周期内保持的运行偏移量。

    如果您将mousePosition 更改为类级别变量并在操作开始时设置该变量(在MouseDown 事件处理程序中)并停止在MouseMove 事件处理程序中更新该变量,这些行将开始转换方式你期待。

    point mousePosition;
    
    private void GraphMouseDown(object sender, MouseButtonEventArgs e)
    {
        CanvasMouseDown = true;
        mousePosition  = e.GetPosition(canvas);
    }
    
    private void GraphMouseMove(object sender, MouseEventArgs e)
    {
        if (CanvasMouseDown)
        {
            var position = e.GetPosition(canvas);
            var offset = position - mousePosition;
    
            for (int i = 0; i < GridLinesHoriz.Length; ++i)
            {
                GridLinesHoriz[i].RenderTransform = new TranslateTransform(offset.X, offset.Y);
            }
    
            for (int i = 0; i < GridLinesVert.Length; ++i)
            {
                GridLinesVert[i].RenderTransform = new TranslateTransform(offset.X, offset.Y);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多