2011-12-14 8 views
2

私はプロジェクトの後半にあり、(カスタマイズされた.net4)カレンダーと(もう一度カスタム)ボタンがある画面があります。.Net 4カレンダーに反応しないボタン(バグ?)

日付が選択されると、ボタンは休止状態になり、ホバービジュアル状態に切り替わらず、最初のクリックを登録しません。しかし、それがクリックされると、少なくとも、あなたが再び日付について気が変わるまで、通常のボタン、コマンドの発射、視覚的な状態の切り替えなどに戻ります。

私の最初のアイデアは、カレンダーとボタンの間のフォーカススコープ、または同様のものですが、私はWPFの焦点があまりにも暑いわけではありませんが、まだ理論のサポートは見つかりませんでした。

私はこの(kaxamlでテスト)でそれを繰り返すことができた:

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <Calendar /> 
    <Button>Hello, world!</Button> 
    </StackPanel> 

、それはWPFのツールキット(2010年2月)のカレンダーと同じです。..

EDIT:私は私はボタンでテストしていますが、これはうまくいかないUI要素が見つかりませんでした。また、calendarDayButtonを選択すると、Kaxamls UIが休止状態になることさえあります。

答えて

3

Calendarコントロールがクリックされたときにマウスをキャプチャするように見えます。 GotMouseCaptureイベントでマウスキャプチャを解放することで、この動作を取り除くことができます。

これを行うの副作用が何であるかは考えますが、キャプチャを解放するコードは次のようになります。

private void Calendar_GotMouseCapture(object sender, MouseEventArgs e) 
{ 
    if (e.OriginalSource is CalendarItem) 
     Mouse.Capture(null); 
} 

編集を

なぜマウスが停止するようにナビゲーションを引き起こしていた解放テストしていましたいくつかのテストの結果、カレンダーのある項目をクリックするとフォーカスが取得され、他の項目はフォーカスが取得されないことが判明しました。マウスを盗むアイテムは常に、e.OriginalSourceはタイプCalendarItem

+0

良い見つけるのであればこれだけリリースマウスキャプチャにチェックを追加し、System.Windows.Controls.Primitives.CalendarIteme.OriginalSourceを持ってCalendarDayButtonsための素晴らしい作品が、カレンダーのナビゲーションボタンは機能しません。私は、マウスキャプチャを解放する前に300ミリ秒待っているMEGAハックを書いた。そしてそれはナビゲーションをバックアップする。クリーンslnを探し続けるつもり=] –

+0

@ Dead.Rabit私はもう少しそれを探していた、それはカレンダーコントロールが実際にはポップアップです。クリックするとマウスがキャプチャされ、フォーカスを失うようにするには、マウスの外側をクリックする必要があります。おそらく、ドロップダウンカレンダーを持ち、ComboBoxのように動作する 'Calendar'の代わりに' DatePicker'を使うことができますか? – Rachel

+0

@ Dead.Rabit更新情報を参照してください。あなたは 'カレンダー'を正しくナビゲートし、マウスイベントを盗まないようにする必要があります。 – Rachel

関連する問題