用于 Silverlight 中拖放的 TranslateTransform

     2023-02-23     32

关键词:

【中文标题】用于 Silverlight 中拖放的 TranslateTransform【英文标题】:TranslateTransform for drag and drop in Silverlight 【发布时间】:2011-01-30 12:05:07 【问题描述】:

我们正在尝试在 Silverlight (3) 中实现拖放。我们希望用户能够将元素从树视图拖到 UI 的另一部分。父元素是一个 Grid,我们一直在尝试使用 TranslateTransform 以及 MouseLeftButtonDown、MouseMove (等)事件,正如各种在线示例所推荐的那样。例如:

http://www.85turns.com/2008/08/13/drag-and-drop-silverlight-example/

我们正在 IronPython 中执行此操作,但这应该或多或少无关紧要。拖动开始已正确启动,但我们拖动的项目出现在“错误”位置(从光标向右和向下偏移几百像素),我终生无法弄清楚原因。

基本xaml:

<Grid x:Name="layout_root">
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition Height="120"/>
    </Grid.RowDefinitions>
    <Border x:Name="drag" Background="LightGray" Width="40" Height="15"
     Visibility="Collapsed" Canvas.ZIndex="10">
        <Border.RenderTransform>
            <TranslateTransform x:Name="transform" X="0" Y="0" />
        </Border.RenderTransform>            
        <TextBlock x:Name="dragText" TextAlignment="Center"
         Foreground="Gray" Text="foo" />
    </Border>
    ...
</Grid>

startDrag 方法由 MouseLeftButtonDown 事件触发(在 TreeViewItem.Header 中的 TextBlock 上)。 onDrag 由 MouseMove 触发。在以下代码中,self.root 是 Application.Current.RootVisual(来自 app.xaml 的*** UI 元素):

def startDrag(self, sender, event):
    self.root.drag.Visibility = Visibility.Visible
    self.root.dragText.Text = sender.Text
    position = event.GetPosition(self.root.drag.Parent)

    self.root.drag.transform.X = position.X
    self.root.drag.transform.Y = position.Y

    self.root.CaptureMouse()
    self._captured = True

def onDrag(self, sender, event):
    if self._captured:
        position = event.GetPosition(self.root.drag.Parent)
        self.root.drag.transform.X = position.X
        self.root.drag.transform.Y = position.Y

拖动的项目跟随鼠标移动,但有相当大的偏移。知道我做错了什么以及如何纠正吗?

【问题讨论】:

【参考方案1】:

所以事实证明,我应该设置 Margin 而不是使用 TranslateTransform:

def startDrag(self, sender, event):
    self.root.drag.Visibility = Visibility.Visible
    self.root.dragText.Text = sender.Text

    self.root.CaptureMouse()
    self._captured = True
    self.root.MouseLeftButtonUp += self.stopDrag
    self.root.MouseLeave += self.stopDrag
    self.onDrag(sender, event)

def onDrag(self, sender, event):
    if self._captured:
        position = event.GetPosition(self.root.layout_root)
        self.root.drag.Margin = Thickness(position.X, position.Y, 0, 0)
        self.root.drag.UpdateLayout() 

【讨论】:

在 Windows 中拖放的通知

】在Windows中拖放的通知【英文标题】:Notificationofdropindrag-dropinWindows【发布时间】:2010-09-0614:33:15【问题描述】:我的C#程序有一个文件列表,可以从中拖放到另一个程序中。我的要求是先将文件复制到不同的目录。那么,是否... 查看详情

在 HTML5 中拖放的 Javascript

】在HTML5中拖放的Javascript【英文标题】:JavascripttoDragandDropinHTML5【发布时间】:2012-01-0115:49:50【问题描述】:尝试在HTML5中做一个简单的拖放示例-但是当我将图像拖放到div元素中时,出现以下错误。未捕获的类型错误:无法将属... 查看详情

在 HTML5 中拖放的 Javascript

】在HTML5中拖放的Javascript【英文标题】:JavascripttoDragandDropinHTML5【发布时间】:2012-01-0115:49:50【问题描述】:尝试在HTML5中做一个简单的拖放示例-但是当我将图像拖放到div元素中时,出现以下错误。未捕获的类型错误:无法将属... 查看详情

在 Selenium WebDriver 中拖放的 JavaScript 解决方法

】在SeleniumWebDriver中拖放的JavaScript解决方法【英文标题】:JavaScriptworkaroundfordraganddropinSeleniumWebDriver【发布时间】:2013-10-2311:07:09【问题描述】:clickAndHold在我的测试环境设置中不适合我。尝试使用高级用户交互执行它时,我不... 查看详情

使用 jQuery 在表格中拖放(使用两个可拖放的函数)

】使用jQuery在表格中拖放(使用两个可拖放的函数)【英文标题】:Drag&DropintableusingjQuery(usingtwodraggable,droppablefunctions)【发布时间】:2021-06-1621:22:08【问题描述】:我正在使用jQuery来满足我的拖放要求,idk不在这里工作的原因... 查看详情

关于如何在 ASP.net 中拖放的建议

】关于如何在ASP.net中拖放的建议【英文标题】:adviceonhowtodrag/dropinASP.net【发布时间】:2013-03-1702:17:09【问题描述】:好的,所以我想要一个简单的SINGLE网页,它可以带一个小人,并将他拖到一个运动场(只是一个背景形状的足... 查看详情

在 AngularJS 应用程序中拖放的自定义指令

】在AngularJS应用程序中拖放的自定义指令【英文标题】:CustomdirectivetoDragandDropinAngularJSapp【发布时间】:2017-10-2719:18:50【问题描述】:我在AngularJS中编写了一个应用程序,我正在处理的一项要求是将元素从左侧拖放到右侧容器中... 查看详情

在 Tkinter 中拖放?

】在Tkinter中拖放?【英文标题】:DragandDropinTkinter?【发布时间】:2013-04-1503:20:54【问题描述】:在tkinter中完成拖放的正确/官方/适当/推荐方式是什么?我的文档第24.1.1节包括:Tkdnd对Tkinter的拖放支持。这是实验性和当它被TkDND... 查看详情

用于 HTML5 拖放的 DropEffect 语义

】用于HTML5拖放的DropEffect语义【英文标题】:DropEffectsemanticforHTML5draganddrop【发布时间】:2014-05-0302:12:56【问题描述】:根据HTML5规范,放置目标上的dropEffect属性允许放置目标选择所需的放置效果。拖放框架应将此与拖动源设置... 查看详情

使用 Dragula 在应用程序中拖放 WebDriver

...过WebDriver内置的DragAndDrop()方法(我的理解是它通常不适用于现代网络技 查看详情

用于 Internet Explorer 的拖放文件上传库

】用于InternetExplorer的拖放文件上传库【英文标题】:DraganddropfileuploadlibraryforInternetExplorer【发布时间】:2012-04-2718:22:21【问题描述】:我发现了一个很棒的库,名为JQueryFileUpload,用于在现代浏览器中拖放文件上传。不幸的是,... 查看详情

在 NSView 中拖放

】在NSView中拖放【英文标题】:DraganddropinanNSView【发布时间】:2012-10-3120:51:52【问题描述】:我正在NSView中测试拖放,但从未调用过draggingEntered:。代码:#import<Cocoa/Cocoa.h>@interfacetestViewDrag:NSView<NSDraggingDestination>@end@impleme... 查看详情

在树视图中拖放

】在树视图中拖放【英文标题】:Drag&DropinTreeview【发布时间】:2010-11-0419:12:01【问题描述】:我正在尝试在树形视图中拖放文件,但我不知道如果我运行它并尝试拖动文件,它为什么会崩溃。下面的代码是我尝试过的。请帮... 查看详情

在 Quasar 中拖放文件

【中文标题】在Quasar中拖放文件【英文标题】:DraganddropfilesinQuasar【发布时间】:2021-12-2417:13:47【问题描述】:Quasar是否支持像下面这样拖放文件来上传?【问题讨论】:【参考方案1】:是的,q-uploader支持拖放文件。https://codep... 查看详情

从 NSOutlineView 中拖放

】从NSOutlineView中拖放【英文标题】:DraganddropfromwithinaNSOutlineView【发布时间】:2012-08-2819:33:00【问题描述】:我正在尝试弄清楚如何实现从NSOutlineView到自身的拖放。例如,我希望用户能够在NSOutlineView中重新排序和嵌套和重新嵌... 查看详情

在“ListView”中拖放

】在“ListView”中拖放【英文标题】:DragandDropina`ListView`【发布时间】:2012-11-2404:08:20【问题描述】:我正在尝试在android(IceCreamSandwich)中实现ListView的拖放操作。因此,当拖动的对象到达ListView的边缘时,我正在向相关方向滚动Li... 查看详情

需要在icarousel中拖放视图

】需要在icarousel中拖放视图【英文标题】:Needdraganddropaviewinicarousel【发布时间】:2012-03-2705:00:33【问题描述】:我在我的iPad应用程序中使用icarousel。我想要一个功能,比如在icarousel中拖放对象。将视图拖出轮播以从中删除项目... 查看详情

在 UITextView 中拖放时显示文本光标

】在UITextView中拖放时显示文本光标【英文标题】:ShowtextcursorondraganddropinUITextView【发布时间】:2018-05-0104:01:42【问题描述】:我正在我的应用中实现拖放。将应用拖放(主要是拖放)的主要屏幕之一是UITextView。我已使用以下代... 查看详情