2013-10-11 34 views
0

我想創建一個基於ItemsControl的WPF動態表。理想情況下,我希望集合中的每個元素都以特定的樣式呈現,並且在包裝並轉到下一行之前在表格中適合3。它幾乎完美地工作,唯一的問題是我有一個約30像素的空間寬度在列表中的條目3後。如果將數字相加,您將看到textblocks + margin分別等於140,因此其中3個是420 - 表格寬度是450,所以存在您會想到的問題。WrapPanel沒有填寫完整的所需寬度

很遺憾沒有。

如果我將第一個文本塊的寬度增加到110而不是105,那麼只需要一個小小的改變,這會使得3個條目435的總寬度仍小於450--這是表格的寬度,然後它只包含2個條目並在右側留下大量空白空間。

我懷疑它可能是由於WPF爲垂直滾動條保留的「保留空間」,因爲這通常是20寬,這將使我的可用空間爲430,並且435比這更高,所以它包裝。

我的問題是,我如何隱藏所有滾動條,並使它們根本不顯示或保留任何保留空間,以便我可以使用項目控件的全部寬度?下面

<ItemsControl ItemsSource="{Binding TradeCategories}" Grid.Row="1"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Orientation="Horizontal" MaxWidth="450" Background="{StaticResource SubTableRow}"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" MaxWidth="150"> 
       <TextBlock Width="105" FontSize="10" Text="{Binding CategoryName}" Foreground="{StaticResource SubTableText}" Margin="5,0,0,0"/> 
       <TextBlock Width="25" FontSize="10" Text="{Binding CategoryCount}" TextAlignment="Center" Background="{StaticResource SubTableHighlightCell}" Foreground="{StaticResource SubTableText}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

默認模板ItemsControl的沒有'ScrollViewer'。除非你自己重寫,否則它不應該包含任何滾動條。 –

+0

你能看到任何滾動條嗎?我很確定'ItemsControl'沒有任何... ListBox有一個內部的ScrollViewer,但是ItemsControl沒有。 – Sheridan

+0

嗯好吧,它不是那麼。但回到我原來的問題,我似乎無法填寫上表超過420寬度。包裝面板具有MaxWidth 450,因此應該適合寬度150的3個項目。但是,如果項目的寬度超過140,則每行只剩下兩個顯示,其餘的包裝將被覆蓋,因此包裝面板未充分利用 – NZJames

回答

0

XAML它看起來像ItemControl的寬度比預期的小,通過它的容器也可能會受到限制。

一個簡單的辦法是通過

<WrapPanel Orientation="Horizontal" MinWidth="450" ... 

所以更換

<WrapPanel Orientation="Horizontal" MaxWidth="450" ... 

,以確保該WrapPanel有足夠的空間用於3個項目。 這樣,即使ItemControl小於450,每行仍然有3個項目。

另一種解決方案是迫使ItemControlWidth是450

+0

謝謝,這是我最終做的,設置寬度本身。奇怪的是,要讓項目完全填充表格的內容,我必須將wrappanel的寬度設置爲450,並將堆棧面板項目設置爲139,這意味着3的時間是417.非常奇怪,所以某處存在額外的空間添加,但我不知道在哪裏。它現在正在工作,所以我可以關閉這個問題,但我想仍然理解爲什麼會發生這種情況 – NZJames

+0

你確定沒有'Style'修改'Width','Margin'或'Padding'任何這些控件的?您可以使用Snoop(snoopwpf.codeplex.com)輕鬆查看。 –

+0

感謝您的鏈接,將閱讀如何使用它並檢查 – NZJames