2013-11-20 68 views
2

我是WPF新手,請耐心等待。在UniformGrid中,我放置了多個在運行時創建的UserControl。我想知道的是如何在運行時拖放,移動或交換這些控件的位置。我在互聯網上搜索了所有內容,但找不到任何有用的東西。在統一網格內拖放項目

回答

1

UniformGrid是一個佈局控件。你不能直接與它互動。

爲了達到您的需要,我爲您提供這個解決方案。

  1. 創建ItemsControl元素
  2. 更改ItemsPanelUniformGrid
  3. 使用GongSolutions.Wpf.DragDrop project。您可以從nuGet安裝它http://www.nuget.org/packages/gong-wpf-dragdrop/

此解決方案可以在沒有任何代碼隱藏或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> 
+0

我怎麼能在運行時動態在ItemsControl中添加項目?正如我在統一網格中一樣,我在運行時拖放項目。 – mrafiraza

+0

將ItemsControl ItemsSource綁定到ObservableCollection 。你需要幫助嗎? – sacha

+0

是的。我會非常感謝你。 – mrafiraza