Ich habe eine ItemsControl
, deren ItemsPresenter
auf das Ereignis MouseMove
reagiert. Elemente werden innerhalb der Datenquelle verschoben. Wenn sich die Maus beim Verschieben von Elementen über dem Steuerelement befindet, wird das Ereignis MouseMove
ausgelöst, obwohl sich die Maus nicht bewegt.Warum wird das MouseMove-Ereignis ausgelöst, wenn sich die Maus nicht bewegt?
Im Folgenden finden Sie ein Beispiel für das Problem.
XAML:
<ItemsControl Name="ladder" ItemsSource="{Binding Rows}">
<ItemsControl.Template>
<ControlTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="Header" Grid.Column="0" />
<ItemsPresenter Grid.Row="1"
MouseMove="OnMouseMove"/>
</Grid>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
Die C#:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
Rows.Add(new Row { Name = "0" });
Rows.Add(new Row { Name = "1" });
Rows.Add(new Row { Name = "2" });
Rows.Add(new Row { Name = "3" });
Rows.Add(new Row { Name = "4" });
DispatcherTimer t = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(1000) };
t.Tick += T_Tick;
t.Start();
}
private void T_Tick(object sender, EventArgs e)
{
Rows.Move(4, 0);
}
private void OnMouseMove(object sender, MouseEventArgs e)
{
Debug.WriteLine(e.Timestamp);
}
public ObservableCollection<Row> Rows { get; set; } = new ObservableCollection<Row>();
}
public class Row
{
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
Wenn Sie debug/diese ausführen, die Maus über die ItemsControl
bewegen, und lassen Sie ihn dort, werden Sie im Ausgabefenster sehen dass das Ereignis MouseMove
ausgelöst wird, während Elemente im Steuerelement verschoben werden.
Gründe dafür? Oder gibt es eine Möglichkeit, diese Ereignisse zu filtern und nur auf "echte" Mausbewegungen zu reagieren?
ich aus der Maus Perspektive denke, es bewegt. – LarsTech
Aber ist das Ereignis nicht aus Sicht der Steuerung, nicht der Maus? – WasGoodDone
Können Sie die Position der Maus gleichzeitig ausgeben? Vielleicht gibt es sehr kleine kleine Mausbewegungen, die mit dem bloßen Auge nicht sichtbar sind, aber der Computer nimmt auf? –