7

WPF MVVM アプリケーションにツールチップ システムを実装しようとしています。ツールチップは、MainWindow の一部である特定のラベルに表示され (マウス ポインターにホバリングしていない)、マウスオーバーで発生する必要があります (理想的には設定可能な遅延がありますが、それは重要ではありません)、メソッドを呼び出します。適切な ViewModel で。次に、ViewModel は、表示するツールチップなどを解決するモデル レイヤーへの接続を処理します。

私の問題は、ビューからViewModelへのマウスオーバーイベントを、イベントを発生させたオブジェクトのIDとともに取得する方法です(そのため、適切なツールチップを解決できます)。たとえば、SettingsView.xaml に があるとします。マウス オーバー時に MyLabel を引数として (または他の方法でアクセス可能)、SettingsViewModel<Label Name="MyLabel" Content="This is a label" />のメソッドを呼び出すにはどうすればよいでしょうか? GetTooltip(string id)どういうわけかそれを行うためにレギュラーを使用できます<Trigger>か?

4

3 に答える 3

2

実行する必要があるのは、いくつかのコマンド(ViewModelsがビュー内のイベントと対話するための推奨されるアプローチ)をマウスイベントに接続してから、「ツールチップ」コントロールに適切な情報を「入力」することです。

たとえば、ViewModelにはToolTipプロパティ(一方向を表し、ToolTipViewModelのみを取得)があり、UIの領域に(DataTemplateを使用して)バインドできます。新しい「MouseOver」コマンドにバインドし、コマンドに基づいてToolTipViewModelプロパティにあるオブジェクトを設定/無効化します。これにより、テスト容易性、ゼロコードビハインド、およびDataTemplatesを使用したツールチッププレゼンテーションの構築が可能になります。

このリンクをチェックして、通常は「コマンドなし」のコントロールでコマンドを作成し、それらにバインドすることで問題が解決するかどうかを確認してください。

于 2011-05-04T15:52:13.643 に答える
1

まず、組み込みToolTipコントロールを試しましたか? 必要なものは無料で提供される可能性があり、複雑なコンテンツをホストするようにスタイル設定/テンプレート化できます。

次に、MouseEnterすべての WPF コントロールで使用可能なイベントを使用できる場合があります。ただし、サポートするコントロールにハンドラーをアタッチする必要があります。

すべてのコントロールを一般的にカバーするために、ハンドラを親WindowPreviewMouseMoveイベント (またはOnPreviewMouseMoveWindow のコード ビハインドでオーバーライド) にアタッチすることを検討してください。次に、 を使用して、マウス ポインターの下にあるコントロールを見つけることができますHitTest。ただし、これはそれほど効率的ではありません。そのため、組み込みのToolTipコントロールを使用したほうがよい場合があります。

于 2011-05-03T20:47:06.557 に答える
0

コントロールテンプレートにネストされたTextBlockを使用してポップアップコントロールを作成し(ラベルのスタイルを作成)、その可視性プロパティをIsMouseOverのときにバインドし、配置ターゲットをウィンドウの下部にある表示するコントロールにバインドします。水平/垂直オフセットプロパティを使用して微調整します。

于 2011-05-03T22:38:22.900 に答える