2
我是WPF新手,請耐心等待。在UniformGrid中,我放置了多個在運行時創建的UserControl。我想知道的是如何在運行時拖放,移動或交換這些控件的位置。我在互聯網上搜索了所有內容,但找不到任何有用的東西。在統一網格內拖放項目
我是WPF新手,請耐心等待。在UniformGrid中,我放置了多個在運行時創建的UserControl。我想知道的是如何在運行時拖放,移動或交換這些控件的位置。我在互聯網上搜索了所有內容,但找不到任何有用的東西。在統一網格內拖放項目
UniformGrid
是一個佈局控件。你不能直接與它互動。
爲了達到您的需要,我爲您提供這個解決方案。
ItemsControl
元素ItemsPanel
到UniformGrid
此解決方案可以在沒有任何代碼隱藏或VM代碼的情況下編寫。
<Window x:Class="WpfApplication6.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:dd="clr-namespace:GongSolutions.Wpf.DragDrop;assembly=GongSolutions.Wpf.DragDrop"
Title="MainWindow" Height="350" Width="525">
<ItemsControl Height="150"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Items>
<system:String>Item 1</system:String>
<system:String>Item 2</system:String>
<system:String>Item 3</system:String>
</ItemsControl.Items>
</ItemsControl>
</Window>
更新:
如果您需要從其他控件拖動項目,然後將其添加到您的代碼隱藏文件。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
SourceOfItems = new List<string>() { "Source 1", "Source 2", "Source 3" };
Items = new ObservableCollection<string>() { "Item 1", "Item 2", "Item 3" };
}
public ObservableCollection<string> Items { get; private set; }
public List<string> SourceOfItems { get; private set; }
}
和更新您的XAML這樣的:
<Window x:Class="WpfApplication6.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dd="clr-namespace:GongSolutions.Wpf.DragDrop;assembly=GongSolutions.Wpf.DragDrop"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<ListBox ItemsSource="{Binding SourceOfItems}"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="False"/>
<ItemsControl Height="150"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True"
ItemsSource="{Binding Items}"
Background="Plum"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</Window>
我怎麼能在運行時動態在ItemsControl中添加項目?正如我在統一網格中一樣,我在運行時拖放項目。 – mrafiraza
將ItemsControl ItemsSource綁定到ObservableCollection。你需要幫助嗎? –
sacha
是的。我會非常感謝你。 – mrafiraza