親がフォーカスされているときにItemsControlがフォーカス四角形を表示するのはなぜですか?

StackOverflow https://stackoverflow.com/questions/820125

質問

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

しかし、最近、ItemsControlにフォーカスがありませんでしたが、その親の1つがフォーカス四角形を表示しました。 ItemsControlは、 did にフォーカスがある別の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がフォーカス四角形を表示することを決定するために使用するメカニズムは何ですか?
役に立ちましたか?

解決

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

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top