none
wpf listbox中ScrollIntoView()位置偶尔不正常 RRS feed

  • 问题

  • 有个listbox,itemsoure改变后使用ScrollIntoView定位到新的item,偶尔会出现item不在显示视图上。SourceUpdated事件也不触发。怎么解决ScrollIntoView定位不准的问题?listbox的数据源会变化
    ths
    2013年12月17日 10:08

答案

全部回复

  • 也给点儿截图和代码呀?否则谁知道这是个什么问题。大家都在这边猜测!强烈建议你下次发问题的时候把代码一起发上来,这样大家也省不少力气去帮你分析这个问题。你说呢?
    2013年12月18日 6:00
  • <ListBox x:Name="ScrollListBox"
    Style="{StaticResource CustomRadListBox}"
    ScrollViewer.HorizontalScrollBarVisibility="Disabled"
    ScrollViewer.VerticalScrollBarVisibility="Disabled"
    								ItemTemplate="{StaticResource ScrollItemsDataTemplate}"
     ItemsPanel="{StaticResource RadListBoxItemsPanel}"
    ItemContainerStyle="{StaticResource HorizontalItemsStyle}" 
    ItemsSource="{Binding Items"/>
    
    class ViewModel
    {
    Int Index;
    ObservableCollection<Option> Items;
    }
    
    使用的时候是这么用
    void SetData(ViewModel viewModel)
    {
    ScrollListBox.DataContext = viewModel;
    var item = viewModel.Items[viewModel.Index];
    ScrollListBox.ScrollIntoView(item);
    }
    
    有外部通知,然后出现当我选Index = 0的时候,索引0的Item不在显示内容区内。

    以上都没有异常
    2013年12月18日 6:37
  • 您好!

    我建议您这样来做,您可以使用Dependency Property或者继承List Box创建一个新的用户控件,

    public class ScrollingListBox : ListBox
    {
        protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            int newItemCount = e.NewItems.Count; 
    
            if(newItemCount > 0) 
                this.ScrollIntoView(e.NewItems[newItemCount - 1]);
    
            base.OnItemsChanged(e);
        } 
    }

    XAML中可以,

    xmlns:custom="clr-namespace:ScrollingListBoxNamespace"
    <custom:ScrollingListBox Margin="10" Height="150"
                             ItemsSource="{Binding Path=MyValue}" />

    这里有两个类似的帖子,

    http://stackoverflow.com/questions/16866309/listbox-scroll-into-view-with-mvvm

    http://social.msdn.microsoft.com/Forums/en-US/ece4bb29-4e3a-4373-b563-5efa74997b05/c-listbox-scrollintoview-doesnt-scroll-to-selected-index

    祝您生活愉快!


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年12月18日 7:46
    版主