【问题标题】:Position of dragged&dropped element (MouseDragElementBehavior)拖放元素的位置(MouseDragElementBehavior)
【发布时间】:2011-09-03 19:24:51
【问题描述】:

我正在尝试使用 MouseDragElementBehavior 实现具有拖放功能的 WPF 应用程序。 但我只是找不到一种方法来获取相对于其父 Canavs 的放置元素位置。 示例代码:

namespace DragTest {
    public partial class MainWindow : Window {

        private Canvas _child;

        public MainWindow() {
            InitializeComponent();

            Canvas parent = new Canvas();
            parent.Width = 400;
            parent.Height = 300;
            parent.Background = new SolidColorBrush(Colors.LightGray);    

            _child = new Canvas();
            _child.Width = 50;
            _child.Height = 50;
            _child.Background = new SolidColorBrush(Colors.Black);

            MouseDragElementBehavior dragBehavior = new MouseDragElementBehavior();
            dragBehavior.Attach(_child);
            dragBehavior.DragBegun += onDragBegun;
            dragBehavior.DragFinished += onDragFinished;

            Canvas.SetLeft(_child, 0);
            Canvas.SetTop(_child, 0);

            parent.Children.Add(_child);

            Content = parent;

        }

        private void onDragBegun(object sender, MouseEventArgs args) {
            Debug.WriteLine(Canvas.GetLeft(_child));
        }

        private void onDragFinished(object sender, MouseEventArgs args) {
            Debug.WriteLine(Canvas.GetLeft(_child));
        }
    }
}

删除子 Canvas 后,Canvas.GetLeft(_child) 的值仍为 0。 为什么?为什么不改?

当然,我可以使用dragBehavior.X 获得新位置,但这是子画布在主窗口中的位置,而不是相对于父画布的位置。一定有办法得到它……

【问题讨论】:

    标签: c# wpf drag-and-drop


    【解决方案1】:

    我刚刚找到了解决方法:

    private void onDragFinished(object sender, MouseEventArgs args) {
        点 windowCoordinates = new Point(((MouseDragElementBehavior)sender).X, ((MouseDragElementBehavior)sender).Y);
        点 screenCoordinates = this.PointToScreen(windowCoordinates);
        点 parentCoordinates = _parent.PointFromScreen(screenCoordinates);
        Debug.WriteLine(parentCoordinates);
    }

    所以我简单地将点转换为屏幕坐标,然后从屏幕坐标转换为父坐标。

    但是,如果父 Canvas 位于某些 ScrollView 或其他东西中,则会出现问题。 这种拖放方法似乎没有一个简单的解决方案......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      相关资源
      最近更新 更多