我真的很难在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吗?
答案 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。