2013-11-20 3 views
2

Я новичок в WPF, поэтому, пожалуйста, несите меня. В UniformGrid я добавляю несколько UserControls, которые создаются во время выполнения. Я хочу знать, как перетаскивать, перемещать или менять положение этих элементов управления во время выполнения. Я искал по всему Интернету, но не мог найти ничего полезного.Перетащите предмет падения внутри Равномерная сетка

ответ

1

UniformGrid - это элемент управления компоновкой. Вы не можете напрямую взаимодействовать с ним.

Чтобы достичь того, что вам нужно, я предлагаю вам это решение.

  1. Создать ItemsControl элемент
  2. Измените ItemsPanel к UniformGrid
  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> 

Update:

Если вам нужно перетаскивать элементы из другого элемента управления, то добавьте в ваш файл кода.

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 с наблюдаемым набором . Вам нужна помощь для этого? – sacha

+0

Да, пожалуйста. Я был бы очень благодарен вам. – mrafiraza

Смежные вопросы