我使用Silverlight Toolkit的PanelDragDropTarget和Telerik的RadWrapPanel作为面板容器,如下面的代码所示:
<controlsToolkit:PanelDragDropTarget Grid.Row="1" AllowDrop="True" AllowedSourceEffects="Move" x:Name="panelDragDropTarget"
ItemDragStarting="PanelDragDropTarget_ItemDragStarting"
HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
ItemDragCompleted="panelDragDropTarget_ItemDragCompleted"
MinWidth="1250" MinHeight="480"
HorizontalAlignment="Left" VerticalAlignment="Top">
<telerik:RadWrapPanel x:Name="WidgetsPanel" HorizontalAlignment="Left" VerticalAlignment="Top" Background="White"
IsAnimated="True" AnimationDuration="100" AllowDrop="True" MinWidth="1250" MinHeight="480"></telerik:RadWrapPanel>
</controlsToolkit:PanelDragDropTarget>
我在运行时在RadWrapPanel中添加控件,并且我能够从左到右拖放控件。但是它不允许我将控件从右移到左。
我该如何实现两个方向上的拖放?从左到右和从右到左?
我最终能够实现从左到右和从右到左的拖放控件。这里的关键点是:应该使用Silverlight Toolkit的WrapPanel而不是telerik的RadWrapPanel。下面的代码还支持控件移动时的动画。
<controlsToolkit:PanelDragDropTarget Grid.Row="1" AllowDrop="True" AllowedSourceEffects="Move" x:Name="panelDragDropTarget"
ItemDragStarting="PanelDragDropTarget_ItemDragStarting"
HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
ItemDragCompleted="panelDragDropTarget_ItemDragCompleted"
MinWidth="1255" MinHeight="480"
HorizontalAlignment="Left" VerticalAlignment="Top">
<controlsToolkit:WrapPanel x:Name="WidgetsPanel" HorizontalAlignment="Left" VerticalAlignment="Top"
Background="White" AllowDrop="True" MinWidth="1255" MinHeight="480">
<i:Interaction.Behaviors>
<ei:FluidMoveBehavior AppliesTo="Children" FloatAbove="False" Duration="0:0:0.4" />
</i:Interaction.Behaviors>
</controlsToolkit:WrapPanel>
</controlsToolkit:PanelDragDropTarget>