我有一个 C# 应用程序,我在其中实现如下拖放功能;
<Grid>
<StackPanel Orientation="Horizontal" Height="34" VerticalAlignment="Top">
<TextBlock Text="This is satck panel 1" Padding="0, 10, 20, 10"/>
<StackPanel Orientation="Horizontal" AllowDrop="True" DragEnter="StackPanel_DragEnter" DragLeave="StackPanel_DragLeave" DragOver="StackPanel_DragOver" Drop="StackPanel_Drop" MouseMove="StackPanel_MouseMove" GiveFeedback="StackPanel_GiveFeedback" >
<Border CornerRadius="1" BorderBrush="Black" BorderThickness="1">
<TextBlock Text="Text1"/>
</Border>
</StackPanel>
</StackPanel>
<StackPanel Orientation="Horizontal" Height="30" Margin="0,40" VerticalAlignment="Top">
<TextBlock Text="This is stack panel 2" Padding="0,10,20,10"/>
<Border CornerRadius="1" BorderBrush="Black" BorderThickness="1">
<TextBlock Text="Text2"/>
</Border>
</StackPanel>
</Grid>
我实际上要做的是用具有以下格式的每个项目填充一个列表框:
StackPanel> <TextBlock> </TextBlock> **<StackPanel AllowDrop> <TextBlock /> </StackPanel>** </StackPanel>
StackPanelAllowDrop=True
应该接受 TextBlock drop(文本块可以从其他堆栈面板中删除)。如果 TextBlock 被放在 上StackPanel AllowDrop=True
,它应该接受它作为它的子元素,并将 TextBlock 替换为拖动的 TextBlcok 所在的位置。我通过查看文档实现了这一点,但这不喜欢工作,因为我能够使用 DragEnter、Drag Leave 但不能删除文本框。
我还附上了我的简短示例项目(54 kB),我在其中实施了相同的操作,但这是行不通的。链接:http ://www.mediafire.com/?ssvf95oa8bd5jh6