2009-05-04 25 views
1

當WPF的ItemsControl認爲它具有焦點並且用戶按Tab或Alt時,它將顯示一個焦點矩形。爲什麼ItemsControl的父級重點時會顯示焦點矩形?

但我最近有一個ItemsControl顯示焦點矩形,儘管它沒有焦點 - 其父母之一。 ItemsControl是在一個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 question),以找出其中的焦點矩形是從哪裏來的,因爲我從來沒有期望一個沒有焦點的控件顯示焦點矩形。

我仍然在學習WPF的方法,顯然我還不夠了解,或者這不會讓我困惑。兩個問題要幫我明白了:

  1. 爲什麼不ItemsControl中顯示焦點矩形時,它實際上並不具有焦點,但它確實父控件的一個?這個功能的原因是什麼? (我確信有一個 - 可能與模板或可視化樹有關? - 我只是沒有深入瞭解WPF機制和哲學。)
  2. 如何這樣做的嗎? ItemsControl用什麼機制來決定它應該顯示一個焦點矩形?

回答

1

你確定ItemsControl沒有焦點嗎?如果它正在繪製焦點矩形,它應該。僅僅因爲視覺樹中的控制力較高,並不意味着它的一個孩子也沒有專注。要理解爲什麼,請確保您已經學習了WPF中「邏輯焦點」和「鍵盤焦點」之間的區別。 MSDN上有一個exaustive explanation

0

我認爲這是設計。我的理解是,重點是從父控制繼承,並沿着視覺樹向下。嘗試檢查項目控制父項的視覺風格,然後檢查項目控件本身,以查看xaml的可視化樹正在發生什麼。這應該揭示一些關於發生的事情的線索。此外,您可以嘗試在Google和其他網站上搜索焦點和項目控制等信息。可能還有其他一些信息,這些信息提供了有關如何將所有作品比我可以如何解釋更詳細的信息。如果你點擊itemscontrol然後點擊其他地方,然後點擊父項,會發生什麼?任何焦點改變?你也可以嘗試製作一個覆蓋焦點的自定義類,並使其成爲控件不會以同樣的方式顯示焦點。應該(相當)容易。在某些網站/博客上可能會有這方面的信息。

相關問題