5

Tôi đang thực sự gặp khó khăn để có được một đơn giản kéo và thả mẫu làm việc trong Silverlight 4.Silverlight DragDrop.DoDragDrop()

Dưới đây là những gì tôi có:

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> 

Code-Behind

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()); 
    } 
} 

Sự kiện DragDrop.DragDropCompleted không kích hoạt, tuy nhiên thông số người gửi luôn là rỗng và sự kiện args không thực sự giúp tôi tìm hiểu thêm về sự kiện.

Tôi cũng đã cố gắng sử dụng kiểm soát tùy chỉnh triển khai IAcceptDrop mà không có may mắn.

Ngoài ra, khi tôi bắt đầu thao tác kéo, tôi không có phản hồi trực quan về điều gì đó đang xảy ra (không có thay đổi về con trỏ hoặc bất kỳ thứ gì). Có điều gì sai không?

Tất cả các mẫu tôi đã tìm thấy đều sử dụng DragDropTargets. Là khu nghỉ mát duy nhất của tôi để thực hiện một DragDropTarget cho loại điều khiển cụ thể tôi muốn sử dụng?

Trả lời

5

Tính năng kéo và thả của Silverlight 4 được nhắm mục tiêu vào một trường hợp duy nhất: kéo tệp từ máy tính của bạn vào ứng dụng Silverlight. Bất cứ điều gì ngoài điều đó tại bạn cần phải sử dụng các điều khiển DragDropTarget của Bộ công cụ. Các mô tả về tính năng kéo/thả từ Tim Heuer: http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx

Đối với một số tình huống, bạn có thể phải muốn để có thể kéo một tập tin từ máy tính để bàn của bạn hoặc file explorer vào ứng dụng Silverlight của bạn. Bằng cách bật thuộc tính AllowDrop trên UIElement trong bản phát hành này, bây giờ bạn có thể đáp ứng các tình huống đó.

Nói cách khác, họ không có kế hoạch mang lại cho bạn khả năng thực sự tạo hoạt động kéo của riêng bạn trong mã.

Hầu hết, nếu không phải tất cả, của "Hạn chế" đoạn từ URL này vẫn áp dụng đối với SL4 RTW: http://www.ningzhang.org/2009/11/28/silverlight-drag-and-drop-api/

  • không có hỗ trợ nguồn thả (QueryContinueDrag & GiveFeedback).
  • không có DragDropEffects hoặc DragDropKeyStates trong DragEventArgs.
  • không có hình ảnh cho đối tượng được kéo hoặc DragDropEffects.
  • chỉ kéo và thả tệp được hỗ trợ: tất cả sự kiện đích thả chỉ kích hoạt khi tệp đang được kéo và bị loại bỏ. IDataObject, DataObject và DragEventArgs.Data chỉ hỗ trợ một định dạng: “FileDrop” và dữ liệu thuộc loại FileInfo [].
  • hầu hết các phương pháp IDataObject ném NotImplementedException.
+0

Cảm ơn câu trả lời của bạn. Tôi đang sử dụng phương thức DragDrop.DoDragDrop() từ Bộ công cụ. Trước đây có một thuộc tính AllowDrop đính kèm từ Bộ công cụ, nhưng điều này đã bị loại bỏ trong SL4. Tôi lấy nó là thuộc tính framework đã thay thế nó? –

+0

Có, bạn có thể sử dụng thuộc tính AllowDrop của khung công tác. –

+0

Cảm ơn bạn đã giải thích những gì không có ai tại MS đã làm phiền để nói. –