Silverlight DragDrop.DoDragDrop()

时间:2010-10-06 01:24:49

标签: silverlight silverlight-4.0 drag-and-drop silverlight-toolkit

我真的很难在Silverlight 4中使用简单的拖放示例。

这就是我所拥有的:

XAML

<UserControl x:Class="TestDragDrop.MainPage" Width="350" Height="200"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid Background="White">
        <Rectangle Margin="50,50,200,50" Fill="Orange" MouseLeftButtonDown="r1_MouseLeftButtonDown" />
        <Rectangle Margin="200,50,50,50" Fill="Orange" AllowDrop="true" Drop="r2_Drop" />
    </Grid>
</UserControl>

代码隐藏

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void r1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        DragDrop.DoDragDrop((Rectangle)sender, "test data", DragDropEffects.All, DragDropKeyStates.LeftMouseButton);
    }

    private void r2_Drop(object sender, System.Windows.DragEventArgs e)
    {
        MessageBox.Show("Drop: " + e.Data.ToString());
    }
}

DragDrop.DragDropCompleted事件会触发,但sender参数始终为null,事件参数并不能帮助我找到有关该事件的更多信息。

我还尝试使用实现IAcceptDrop的自定义控件,但没有运气。

此外,当我开始拖动操作时,我没有视觉反馈表明发生了某些事情(光标或其他任何内容都没有变化)。有什么不对吗?

我找到的所有样本都使用DragDropTargets。我唯一可以为我想要使用的特定类型的控件实现DragDropTarget吗?

1 个答案:

答案 0 :(得分:5)

Silverlight 4的拖放功能针对单一场景:将文件从计算机拖到Silverlight应用程序上。您需要使用Toolkit的DragDropTarget控件。 Tim Heuer的拖放功能说明: http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx

  

对于某些情况,您可能有   希望能够从中拖动文件   您的桌面或文件浏览器   您的Silverlight应用程序。通过   启用AllowDrop属性   您可以在此版本中使用UIElement   适应那些场景。

换句话说,他们没有计划让您能够在代码中实际创建自己的拖动操作。

此网址中的大多数(如果不是全部)“限制”部分仍适用于SL4 RTW: http://www.ningzhang.org/2009/11/28/silverlight-drag-and-drop-api/

  
      
  • 没有drop source支持(QueryContinueDrag&amp; GiveFeedback)。
  •   
  • DragEventArgs中没有DragDropEffects或DragDropKeyStates。
  •   
  • 拖动的对象或DragDropEffects没有视觉效果。
  •   
  • 仅支持文件拖放:所有丢弃目标事件   仅在拖动文件时触发   然后放弃了。 IDataObject,DataObject   和DragEventArgs.Data仅支持   一种格式:“FileDrop”和数据   是FileInfo []类型。
  •   
  • 大多数IDataObject方法抛出NotImplementedException。
  •