我正在研究這個wpf應用程序,您可以在TreeView列表中單擊一個StackPanel並將其拖到窗口的另一個區域(在本例中爲地圖)。無法從DragEventArgs獲取數據。 getData()返回null
當我創建的StackPanel,我存儲在標籤屬性所需的數據:
private StackPanel makeStackPanel(messageIconType itemType,
string filePath, CustomClass message)
{
StackPanel stack = new StackPanel();
stack.Orientation = Orientation.Horizontal;
stack.Tag = new List<Object>{message, itemType};
stack.MouseDown += new MouseButtonEventHandler(stack_MouseDown);
return stack;
}
當我點擊的StackPanel,該事件被解僱的MouseDown。我創建一個DataObject,以便將數據傳遞給捕獲「DragDrop」事件觸發的方法。
private void stack_MouseDown(object sender, System.Windows.Input.MouseEventArgs e)
{
StackPanel sp = (StackPanel)sender;
DataObject dataObj = new DataObject();
dataObj.SetData(typeof(List<Object>), (List<Object>)sp.Tag);
DragDrop.DoDragDrop(sp, dataObj, DragDropEffects.Copy);
}
當我們到達DragDrop方法時,e.Data.GetData(typeof(List))返回null。
1 private void Map_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
2 {
3 string[] data = e.Data.GetFormats();
4 int i=0;
5 if(e.Data.GetDataPresent(data[0]))
6 {
7 i++;
8 }
9 if (e.Data.GetDataPresent(typeof(List<Object>)))
10 {
11 i++;
12 }
13 List<Object> obj = (List<Object>)e.Data.GetData(typeof(List<Object>));
14 }
在此之前的行是健康檢查。 e.Data.GetFormats()返回一個字符串,表示格式是List。第5行和第9行的結果均爲真,因此存在List類型的數據。當我在調試時,如果我深入挖掘DragEventArgs e,我可以找到我的數據。只是在第14行中,它總是返回null,我找不到任何其他獲取該數據的方式。