2011-03-21 67 views
3

我一直在嘗試一段時間來顯示列表框/列表視圖中的一些數據,這將是unfocusable(我的意思不僅是列表,而且還包括其中的項目)。WPF如何使列表框/列表視圖unfocusable

我嘗試了兩種類型的列表(列表框和列表視圖),並且我使用了它們的ItemTemplate和ItemContainerStyle。無論我在哪裏,我都將Focusable屬性設置爲false。

我看不到任何其他方式,而不是禁用列表,但是我必須改變它的所有樣式,以使它看起來不被禁用。

我錯過了什麼嗎?有沒有我不知道的只讀類型的列表?

感謝您的想法:)

+0

你爲什麼想要列表是unfocusable?如果你只是想阻止事物被選擇,你可以使用'ItemsControl'來代替。 – 2011-03-21 12:58:33

+0

@DanPuzey:一個目的可能是焦點需要留在別的地方,而不是被列表框「偷走」(例如,當列表框在彈出窗口中),同時仍然有可點擊選擇的項目。 – 2015-03-28 16:59:08

+0

爲了能夠點擊/選擇一個項目,它*具有*可以聚焦。 (我接受的答案在這個問題上表明瞭這一點)。如果你需要點擊某些東西,它必須能夠集中處理點擊(加上,顯然,對於不可聚焦的控件來說,鍵盤互動完全被破壞)。 – 2015-03-28 21:43:45

回答

10

你可能看到的問題是,在列表中的每個單獨的項目可獲得焦點。然而

<ListBox.ItemContainerStyle> 
    <Style TargetType="Control"> 
     <Setter Property="Focusable" Value="False" /> 
    </Style> 
    </ListBox.ItemContainerStyle> 

注意,這使得項目不可選擇(通過鍵盤或鼠標):但是,您可以覆蓋...嘗試添加以下內容到列表框中。您可以通過編程方式設置選定的項目,但不會自動再次突出顯示 - 實際上,這與ItemsControl的行爲幾乎相同。

+0

這一定是這樣,並且以編程方式將'IsSelected'設置爲'true'確實會突出顯示該項目,至少在Windows 7 Aero上是這樣的。 – 2011-03-21 17:33:53

+0

謝謝丹,那正是我想要的。 Items控件的問題在於無法使用綁定選擇任何項目。幸運的是,在我的程序中,選擇的項目仍然會自動突出顯示。 – 2011-03-21 21:13:44

3

使用一個ItemsControl用的TextBlocks,而不是一個列表框

<ItemsControl ItemsSource="{Binding MyListBoxItemsSource}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding MyDisplayName}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl>