2015-09-14 40 views
0

我已經把列表框放在滾動查看器中。滾動查看器包含列表框。垂直滾動條問題選擇wpf中的底部元素

<ScrollViewer x:Name="HostScrollViewer" VerticalScrollBarVisibility="Auto" CanContentScroll="True" VerticalAlignment="Stretch"> 
    <ListBox x:Name = "listBox1"> 
     <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel IsItemsHost="True" VerticalAlignment="Stretch" 
            ScrollViewer.VerticalScrollBarVisibility="Auto" 
            ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
            ScrollViewer.CanContentScroll="False" 
            HorizontalAlignment="Stretch" /> 
     </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
    </ListBox> 
    </ScrollViewer> 

我可以通過所有列表項滾動但是當我向下滾動列表框中的項目,並選擇列表框的底部項目,然後我的垂直滾動條變爲初始位置。

+1

嘗試CanContentScroll =「假」的第一行 –

+1

爲什麼你的列表框包裹在scrollviewer?列表框模板已經包含scrollviewer?其次,你爲什麼要修改ItemsPanel? – Liero

+0

不,仍然沒有工作。如果我編寫CanContentScroll =「False」,那麼我無法使用鼠標滾動來滾動項目。 –

回答

2

我相信你所尋找的僅僅是:

<ListBox x:Name="listBox1" ScrollViewer.CanContentScroll="False" /> 

與鼠標線輪的滾動你的代碼的問題是,喲有兩個scrollviewers,實際上是:HostScrollViewer和一個列表框中的模板。

爲什麼它滾動到頂部,當您選擇項目?那是因爲當你在HostScrollViewer上設置ScrollViewer.CanContentScroll="False",並且你在列表框中選擇一個項目時,HostScrollViewers會滾動到ListBox而不是listboxitem。只是因爲ListBox有另一個滾動查看器。

的另一種選擇是在列表框中禁用的ScrollViewer:

<ScrollViewer x:Name="HostScrollViewer" CanContentScroll="False"> 
    <ListBox x:Name = "listBox1" 
      ScrollViewer.VerticalScrollbarVisibility="Disabled"/> 
</ScrollViewer> 

但視覺效果是一樣的

+0

感謝它的工作:)但現在我無法滾動鼠標滾動 –