У меня есть ItemsControl
, чья ItemsPresenter
отвечает на событие MouseMove
. Элементы перемещаются в источнике данных, и если мышь находится над элементом управления при перемещении элементов, это вызывает событие MouseMove
, даже если мышь не движется.Почему MouseMove срабатывает, когда мышь не движется
Ниже приведен пример, демонстрирующий проблему.
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>
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;
}
}
Если вы отладки/запуска, переместите курсор на ItemsControl
, и оставить его там, вы увидите в окне Output что событие MouseMove
стреляет как элементы в сдвиге управления.
Любые причины для этого? Или есть способ отфильтровать эти события и реагировать только на «реальные» события перемещения мыши?
Думаю, с точки зрения мыши она двигалась. – LarsTech
Но разве это не событие с точки зрения управления, а не с мышью? – WasGoodDone
Можете ли вы вывести положение мыши одновременно? Может быть, есть очень маленькие незначительные движения мыши, которые не видны невооруженным глазом, но компьютер поднимается? –