Wpf 如何确保MouseEnter为所有元素激发
我有一个WPF Items控件,显示一系列矩形 每个矩形都使用MVVM Lights EventToCommand跟踪鼠标事件,并将矩形设置为“选定” 然后,我使用该属性在样式中使用触发器高亮显示矩形 如果鼠标拖得太快,就会出现问题 工作(缓慢拖动): 不工作(快速拖动): 在这种情况下,没有为第二个矩形触发事件Wpf 如何确保MouseEnter为所有元素激发,wpf,mvvm-light,Wpf,Mvvm Light,我有一个WPF Items控件,显示一系列矩形 每个矩形都使用MVVM Lights EventToCommand跟踪鼠标事件,并将矩形设置为“选定” 然后,我使用该属性在样式中使用触发器高亮显示矩形 如果鼠标拖得太快,就会出现问题 工作(缓慢拖动): 不工作(快速拖动): 在这种情况下,没有为第二个矩形触发事件 如何确保鼠标移动到的所有控件都触发事件?我的建议是将所有发生的事件放入队列中。我认为您的问题是因为当一个事件触发时,您调用一个方法,如果该方法在下一个事件发生时尚未完成,则无法再次
如何确保鼠标移动到的所有控件都触发事件?我的建议是将所有发生的事件放入队列中。我认为您的问题是因为当一个事件触发时,您调用一个方法,如果该方法在下一个事件发生时尚未完成,则无法再次调用该方法。 创建一个队列并将发生的事件放在其中,然后创建一个等待队列填充的线程,然后对其进行处理 样本:
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
using System.Timers;
using Timer = System.Timers.Timer;
class Program
{
private static Queue<My_Event> EventQueue;
private static Timer t = new Timer(10);
static void Main(string[] args)
{
Task thread = new Task(MarkStuffYellow);
EventQueue = new Queue<My_Event>();
t.Elapsed += t_Elapsed;
t.Start();
t.AutoReset = true;
}
static void t_Elapsed(object sender, ElapsedEventArgs e)
{
EventQueue.Enqueue(new My_Event(sender, e));
}
private static void MarkStuffYellow()
{
/// !!! While (true) is not an solution, if you do it like this,
/// your CPU will be full !!!
while (true)
{
if (EventQueue.Any())
{
My_Event myEvent = EventQueue.Dequeue();
var sender = myEvent.Sender;
var e = myEvent.E;
/// Do Stuff with your event
}
}
}
}
/// Needed to save your event
internal class My_Event
{
public My_Event(object sender, ElapsedEventArgs e)
{
this.Sender = sender;
this.E = e;
}
public object Sender;
public ElapsedEventArgs E;
}
}
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
命名空间控制台应用程序3
{
使用系统计时器;
使用定时器=System.Timers.Timer;
班级计划
{
私有静态队列事件队列;
专用静态定时器t=新定时器(10);
静态void Main(字符串[]参数)
{
任务线程=新任务(标记为黄色);
EventQueue=新队列();
t、 已用时间+=t_已用时间;
t、 Start();
t、 自动重置=真;
}
静态无效时间(对象发送器,ElapsedEventArgs e)
{
排队(新的My_事件(发送方,e));
}
私有静态void MarkStuffYellow()
{
///!!!虽然(true)不是解决方案,但如果您这样做,
///您的CPU将满!!!
while(true)
{
if(EventQueue.Any())
{
My_Event myEvent=EventQueue.Dequeue();
var sender=myEvent.sender;
var e=myEvent.e;
///为你的活动做些事情
}
}
}
}
///需要保存您的事件
内部类My_事件
{
公共My_事件(对象发送方,ElapsedEventArgs e)
{
this.Sender=Sender;
这个。E=E;
}
公共对象发送器;
公共ElapsedEventArgs E;
}
}