私の問題を説明するために最善を尽くします:
最初は月しか表示されないカレンダーが欲しくて作ってみました
<Calendar x:Name="_Calendar" DisplayMode="Year" DisplayModeChanged="_Calendar_DisplayModeChanged" DisplayDateChanged="_Calendar_DisplayDateChanged"/>
次に、DisplayModeChanged が発火したときに、これを簡単に実行します。
private void _Calendar_DisplayModeChanged(Object InSender, CalendarModeChangedEventArgs InE)
{
if (_Calendar.DisplayMode != CalendarMode.Year)
{
_Calendar.DisplayMode = CalendarMode.Year;
}
}
ユーザーが選択した月を変更したときにグリッドのデータを更新するまでは、すべて問題ありません。次に例を示します。
private void _Calendar_DisplayDateChanged(Object InSender, CalendarDateChangedEventArgs InE)
{
_RefreshGrid();
}
初めて(つまり、ユーザーがカレンダーを操作する前)、グリッドは更新され、ユーザーがマウスを他の月の上に置いても何も起こりません(これが欲しいです)。しかし、ユーザーが別の月をクリックすると、グリッドは再び更新されますが、ユーザーが他の月にカーソルを合わせると、グリッドが再び更新され、ユーザーが他の月をクリックしたときにのみグリッドを更新します。
そのため、ユーザーがホバーすると DisplayDateChanged が発生します...
_RefreshGrid() にメッセージボックスを配置すると、ホバーが DisplayDateChanged を起動しないため、奇妙です。
理解していただければ幸いです。
ありがとう!!
編集:問題はフォーカスにあると思います。メッセージボックスにフォーカスがあるため、メッセージボックスでエラーは発生しません。任意の日付をクリックすると、他の日付にカーソルを合わせるとDisplayDateChangedが発生しますが、最初に別の場所をクリックするといけませんこの問題があります。