Я хочу, чтобы иметь возможность осуществлять ItemsControl с перетаскиваемыми элементами. Причина для ItemsControl заключается в том, что я могу привязываться к моей ViewModel в фоновом режиме.Перетаскиваемые объекты в WPF в ItemsControl?
Я попытался использовать Thumb Control на холсте, и он отлично работает, за исключением случаев, когда я вставляю его в ItemsControl, он перестает работать. Вот то, что я пробовал:
<ItemsControl ItemsSource="{Binding MyItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Thumb Canvas.Left="0" Canvas.Top="0" Width="50" Height="50" DragDelta="MyThumb_DragDelta"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Код позади:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
private void MyThumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
Canvas.SetLeft((UIElement)sender, Canvas.GetLeft((UIElement)sender) + e.HorizontalChange);
Canvas.SetTop((UIElement)sender, Canvas.GetTop((UIElement)sender) + e.VerticalChange);
}
И, наконец, мой ViewModel:
public class MainViewModel : DependencyObject
{
public ObservableCollection<Note> MyItems { get; set;}
public MainViewModel()
{
MyItems = new ObservableCollection<Note>();
MyItems.Add(new Note(){Name="test"});
}
}
public class Note : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string name;
public string Name
{
get { return name; }
set
{
name = value;
if(PropertyChanged!=null) PropertyChanged(this,new PropertyChangedEventArgs("Name"));
}
}
}
Когда я следующий на окне он работает отлично:
<Canvas>
<Thumb Canvas.Left="0" Canvas.Top="0" Width="50" Height="50" DragDelta="MyThumb_DragDelta"/>
</Canvas>
Но когда у меня это есть в I temsControl больше не работает. Я предполагаю, что ItemsControl регистрируется для событий мыши и переопределяет Thumb?
У кого-нибудь есть хорошее решение, чтобы получить работу?
Спасибо за ответ, но это, кажется, имеет один и тот же вопрос. Как будто холст не работает во время контроля элементов. Событие запускается, и я устанавливаю свойства для перемещения его на холст. – Kelly