さて、ユーザーコントロール内の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);
これらのユーザーコントロールのいくつかを動的に作成します。マウスダウンとマウスアップはうまく機能し、私が望むとおりに機能します。画像をクリックし続けると、毎回イベントが発生します。
ただし、頻繁に起動する 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() メソッドです。その更新が発生した後、マウスダウンとマウスアップは失われます。彼らは発砲しません。
キックと笑いのために、私はメソッドにこれをやってみました:
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);
}
しかし、それは本当にイベントを混乱させ、画像の 1 つをクリックすると、以前にこのメソッドを通過した残りの画像もすべて起動されます。
とにかく、私がこの問題をどのように処理するべきか知っている人はいますか?