3

私の問題を説明するために最善を尽くします:

最初は月しか表示されないカレンダーが欲しくて作ってみました

<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が発生しますが、最初に別の場所をクリックするといけませんこの問題があります。

4

1 に答える 1