文章分類/

Infragistics|Ultimate UI for WPF|使用拖放框架交換使用者控制項的位置

0 次瀏覽
2023-12-02 更新

infragistics log

使用 Infragistics 拖放框架允許透過拖放來重新定位標籤控制項。

將 Infragistics 拖放框架合併到標籤控制項的父元素 Grid 中。

<ItemsControl ItemsSource="{Binding Tasks}" Width="650" Margin="17,10,17,10">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border BorderBrush="LightGray" Background="White" BorderThickness="2" Margin="0,0,-1,2" >
                <Grid>
                    ...
                    <Label Content="{Binding Id}" Grid.RowSpan="2"  />
                    <Label Content="{Binding Title}" Grid.Column="1"  Grid.Row="0"/>
                    <Label Content="{Binding Assignee}" Grid.Column="1" Grid.Row="1" />
                </Grid>
                <!--追加-->
                <ig:DragDropManager.DragSource>
                    <ig:DragSource IsDraggable="True" DragChannels="ChannelA" Drop="DragSource_Drop">
                    </ig:DragSource>
                </ig:DragDropManager.DragSource>
                <ig:DragDropManager.DropTarget>
                    <ig:DropTarget IsDropTarget="True" DropChannels="ChannelA">
                    </ig:DropTarget>
                </ig:DragDropManager.DropTarget>
                <!--追加-->
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

處理 DragSource.Drop 事件並交換資料來源的位置。

public partial class MainWindow : Window
{
    ...

    private void DragSource_Drop(object sender, Infragistics.DragDrop.DropEventArgs e)
    {
        var sourcePanel = e.DragSource as Border;
        var sourceTask = sourcePanel.DataContext as Task;

        var targetPanel = e.DropTarget as Border;
        var targetTask = targetPanel.DataContext as Task;

        var vm = this.DataContext as TaskViewModel;
        var tasks = vm.Tasks;

        var sourceIndex = tasks.IndexOf(sourceTask);
        var targetIndex = tasks.IndexOf(targetTask);

        if(sourceIndex < targetIndex)
        {
            tasks.Insert(targetIndex + 1, sourceTask);
            tasks.Remove(sourceTask);
        }
        else
        {
            tasks.Remove(sourceTask);
            tasks.Insert(targetIndex, sourceTask);
        }
    }
}

執行結果

快速跳轉目錄

✦ 群昱 AccessSoft 你的全面軟體解決方案 ✦

身為全球眾多知名軟體在台灣合作夥伴,歡迎諮詢你需要的軟體服務!

Picture of 軟體專家
軟體專家

群昱作為全球知名軟體推薦合作夥伴,致力於提供更多軟體解決方案給你!

更多軟體新知

立即詢價

請留下完整資訊,以便我們提供精確的服務內容給你。

詢價資訊