2017-08-22 55 views
0

我有從視圖模型綁定的項目數量可變,需要水平顯示並且可以選擇。 每個項目都由一個文本表示,這些文本的長度各不相同。當我使用帶有水平方向的StackPanel作爲其ItemTemplate的列表視圖時,這些項目只與內部文本一樣寬。 有沒有辦法使它們的尺寸都相同,這意味着最大尺寸的尺寸?理想情況下,沒有一些複雜的代碼隱藏,使用項目模板等? 注:我無法設置某些任意的最小寬度,因爲我不知道什麼長度的文本可以最終有(不同的語言等)WPF:與均勻寬度的項目水平對齊的集合

+0

你能爲每個項目做一些像 'WIDTH = 「1 *」'? –

+0

不確定你的意思。 TexBlock的寬度不支持「1 *」這樣的東西,如果你的意思是有一個帶有列定義的網格,我只是嘗試過了,沒有做任何事情,但即使我以某種方式得到了這個工作,我認爲將我的項目拉伸到可用的最大寬度,這完全不是我想要的。 – Shaggydog

回答

1

可以使用ListBox其中有UniformGrid作爲ItemsPanel選擇支持。 UniformGrid將分配相等的空間,每個元素

<ListBox> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Rows="1"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 

    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Label Content="{Binding}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

例如

uniform

+0

雖然這有效,但我無法在項目之間添加邊框以及更改所選項目的默認背景顏色。 ? – Shaggydog

+0

@Shaggydog,查看[this Q + A](https://stackoverflow.com/questions/7059526/set-background-color-for-se- t- unts-in-a-listbox)查看顏色設置示例。separator:我將開始通過添加邊框到Label('Label BorderThickness =「1,0」BorderBrush =「Red」')或Border標籤周圍的邊框元素。如果看起來不太好,我會嘗試使用自定義ListBoxItem模板。目前沒有IDE,所以如果你需要更多關於你的問題的詳細幫助,我建議提出一個新的問題。 – ASh