1

WPFのItemsControlは、フォーカスがあると判断し、ユーザーがTabキーまたはAltキーを押すと、フォーカス長方形を表示します。

しかし、最近、ItemsControlにフォーカスがないにもかかわらず、フォーカス長方形を表示させました。その親の1つはフォーカスを持っていました。ItemsControlはUserControl内にあり、UserControlはフォーカスを持っていた別のUserControl内にありました。このようなもの:

<!-- UserControl1.xaml; this is the control that has focus -->
<UserControl x:Class="UserControl1" Focusable="True" ...>
    <UserControl2/>
</UserControl>

<!-- UserControl2.xaml -->
<UserControl x:Class="UserControl2">
    <ItemsControl .../>
</UserControl>

または、ネストを視覚的に表示するには:

+---------------------------------------------------+
| UserControl1 (has focus)                          |
|                                                   |
| +-----------------------------------------------+ |
| | UserControl2                                  | |
| |                                               | |
| | +-------------------------------------------+ | |
| | | ItemsControl (shows focus rectangle)      | | |

フォーカスの長方形を表示するためのフォーカスのないコントロールを予期していなかったため、フォーカスの長方形がどこから来ているのかを理解するのにしばらく時間がかかりました(そしてStackOverflowの質問)。

私はまだWPFの使い方を学んでいますが、明らかにまだ十分に理解していません。そうでなければ、混乱することはありません。私が理解するのに役立つ2つの質問:

  1. ItemsControlが実際にはフォーカスを持っていないのに、親コントロールの1つがフォーカスを持っているのに、なぜフォーカス長方形を表示するのですかこの機能の理由は何ですか?(テンプレートやビジュアルツリーに関係するものがあると確信していますか?-WPFのメカニズムと哲学についてまだ十分に理解していません。)
  2. これはどのように機能しますか?ItemsControlがフォーカス長方形を表示するかどうかを決定するために使用するメカニズムは何ですか?
4

2 に答える 2

1

ItemsControl にフォーカスがないことは確かですか? フォーカス四角形を描画している場合は、そうする必要があります。ビジュアル ツリーの上位にあるコントロールがフォーカスされているからといって、その子の 1 つもフォーカスされていないわけではありません。その理由を理解するには、WPF における「論理フォーカス」と「キーボード フォーカス」の違いを理解していることを確認してください。MSDNに詳しい説明があります。

于 2009-05-28T19:26:46.157 に答える
0

これは設計によるものだと思います。私の理解では、フォーカスは親コントロールから継承され、ビジュアル ツリーを下っていきます。親の itemscontrol のビジュアル スタイルを調べてから、itemscontrol 自体を調べて、xaml のビジュアル ツリーで何が起こっているかを確認してください。これにより、何が起こっているかについての手がかりが明らかになるはずです。また、Google やその他のサイトでフォーカスやアイテム コントロールなどの情報を検索してみてください。すべてがどのように機能するかについて、私が説明できるよりも明確な詳細を提供する情報が他にもあるかもしれません。項目コントロールをクリックし、別の場所をクリックしてから親をクリックするとどうなりますか? 焦点の変更はありますか?フォーカスをオーバーライドするカスタム クラスを作成して、コントロールが同じようにフォーカスを表示しないようにすることもできます。(かなり)簡単にできるはずです。

于 2009-05-26T22:17:50.100 に答える