好的,所以我的 xaml 中有一个用户控件内的图像元素
<Image HorizontalAlignment="Left" Margin="0,0,0,0" Name="imagePiece" Stretch="Fill" VerticalAlignment="Top" Source="{Binding Path=PieceGrid}" />
在我在构造函数后面的代码中:
AddHandler(FrameworkElement.MouseDownEvent, new MouseButtonEventHandler(imagePiece_MouseDown), true);
AddHandler(FrameworkElement.MouseUpEvent, new MouseButtonEventHandler(imagePiece_MouseUp), true);
我动态地创建了几个这样的用户控件。mousedown 和 mouseup 工作得很好,完全按照我的意愿去做。我可以不断地单击图像,并且每次都会触发该事件。
但是,我实现了一个每隔一段时间触发一次的 Timer 对象。那个计时器改变了图像。为了做到这一点,我必须这样做:
private void releaseTheDaemon(object source, ElapsedEventArgs e)
{
int numberOfPieces = 0;
List<GridPieceView> allPlacedPieces = new List<GridPieceView>();
foreach (List<GridPieceView> list in piece)
{
foreach (GridPieceView p in list)
{
if (p.GridOwner != View.Owner.NotSelected)
{
allPlacedPieces.Add(p);
numberOfPieces = numberOfPieces + 1;
}
}
}
int randIndex = randomNumber.Next(0, numberOfPieces);
if (allPlacedPieces.Count > 0)
{
Dispatcher.Invoke(DispatcherPriority.Normal, new Action<GridPieceView>(daemonActions), allPlacedPieces[randIndex]);
}
}
private void daemonActions(GridPieceView gridPiece)
{
gridPiece.GridOwner = View.Owner.NotSelected;
gridPiece.setPieceWhite();
}
setPieceWhite() 方法用于更新视图。在该更新发生后,mousedown 和 mouseup 将丢失。他们不会开火。
对于踢腿和咯咯笑,我尝试对方法执行此操作:
private void daemonActions(GridPieceView gridPiece)
{
gridPiece.GridOwner = View.Owner.NotSelected;
gridPiece.setPieceWhite();
AddHandler(FrameworkElement.MouseDownEvent, new MouseButtonEventHandler(gridPiece.imagePiece_MouseDown), true);
AddHandler(FrameworkElement.MouseUpEvent, new MouseButtonEventHandler(gridPiece.imagePiece_MouseUp), true);
}
但这确实搞砸了事件,每当我点击其中一张图像时,之前通过此方法的所有其余图像也会被触发。
无论如何,有人知道我应该如何处理这个问题吗?