Je veux être en mesure d'implémenter un ItemsControl avec des éléments pouvant être déplacés. La raison de ItemsControl est que je peux lier à mon ViewModel en arrière-plan.Objets pouvant être déplacés dans WPF dans ItemsControl?
J'ai essayé d'utiliser un contrôle de pouce dans une toile et cela fonctionne parfaitement, sauf que dès que je le colle dans un ItemsControl il cesse de fonctionner. Voici ce que j'ai essayé:
<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>
Le code derrière:
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);
}
Et enfin mon 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"));
}
}
}
Quand je fais ce qui suit sur la fenêtre, il fonctionne très bien:
<Canvas>
<Thumb Canvas.Left="0" Canvas.Top="0" Width="50" Height="50" DragDelta="MyThumb_DragDelta"/>
</Canvas>
Mais quand je l'ai dans un I temsControl ne fonctionne plus. Je suppose que ItemsControl est l'enregistrement pour les événements de la souris et le remplacement du pouce?
Quelqu'un at-il une bonne solution pour que cela fonctionne?
Merci pour la réponse, mais cela semble avoir le même problème. C'est comme si la toile ne fonctionnait pas dans un contrôle d'éléments. L'événement se déclenche et je définis les propriétés pour le déplacer sur la toile. – Kelly