2010-07-27 43 views
2

我希望我的ListView的項目增長到佔用ListView內可用空間的整個寬度。設置列表項目以增長到包含ListView的寬度 - WPF

目前,我有項目的寬度設置像這樣(的ListView被命名爲ListView控件):

Width="{Binding ActualWidth, ElementName=listView, Mode=OneWay}" 

的項目將佔用ListView的寬度。但是,不考慮垂直滾動條。如果滾動條存在,它將被繪製在物品右邊的頂部。

可以解決這個問題嗎?

+1

不知道你想要的這裏 - 是不是它的默認ListViewItems使用全寬度? – 2010-07-27 21:10:25

+0

我沒有使用ListViewItem,我使用ItemTemplate來定義ItemsSource綁定的視圖。 – oillio 2010-07-27 21:35:41

回答

2

我通過直接引用ItemsPresenter解決了這個。爲此,我需要爲Viewbox定義一個模板並命名ItemsPresenter。

模板看起來是這樣的:

<ListView.Template> 
    <ControlTemplate TargetType="{x:Type ListView}"> 
     <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true"> 
      <ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}"> 
       <ItemsPresenter x:Name="MLVItemsPresenter" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
      </ScrollViewer> 
     </Border> 
     <--SNIP--> 
    </ControlTemplate> 
</ListView.Template> 

,寬度結合看起來像這樣:

Width="{Binding ActualWidth, ElementName=MLVItemsPresenter, Mode=OneWay}" 
0

ActualWidth包括滾動條,所以我不認爲會有辦法解決這個問題。怎麼樣使用ViewBox

+0

我將如何使用Viewbox? 如果我將物品包裝在Viewbox中,會發生各種不好的事情。我想要讓這些物品成長爲適合可用空間。 Viewbox允許內容使用他們想要的任何空間,然後它可以擴展或收縮它們以適應可用空間。 看來應該有一些方法來引用ListView中ScrollViewer中包含的ItemsPresenter的寬度。這應該是我正在尋找的寬度... – oillio 2010-07-27 21:18:40

1

只是一個想法,但如果你刪除了所有的wWidth-setting?

當我使用:

<ListView DockPanel.Dock="Top"> 
     <ListViewItem Background="Orange">aaa</ListViewItem> 
     <ListViewItem>aaa</ListViewItem>    
    </ListView> 

橙色項目跨越的ListView的整個寬度...

+0

我對WPF比較陌生,但根據我的經驗,這不是發生了什麼。橙色的項目只會跨越其內容所需的寬度。在這種情況下,'aaa'的寬度。如果內容大於可用空間,它們將被要求縮小。但是,如果他們更小,他們不會被要求擴大(我希望他們擴大)。就我而言,列表項是在ItemTemplate中定義的,所以這可能是我的行爲不同的原因。 – oillio 2010-07-27 21:33:13

+0

我剛查過。是的,這是ListViewItem的行爲。但我沒有使用它們,我正在使用ItemTemplate。是否有可能將ItemTemplate設置爲ListViewItem? – oillio 2010-07-27 21:40:59