WPF Combobox当前滚动位置不会改变

我在代码后面的文件中有一个类型为ObservableCollection<ClassName>的公共属性,并且我将它绑定到了Combobox的ItemsSource属性。

<ComboBox Height="23" 
                  Margin="82,34,71,0" 
                  Name="comboBox1" 
                  VerticalAlignment="Top"
                  ItemsSource="{Binding Path=Collection}"
                  DisplayMemberPath="Name" />

在我填充表单载入这个集合后,所有的项目都显示出来,我向下滚动到最后一个元素并选择它。

现在,我点击一个按钮,这将添加另一个项目的集合,我想设置光标到列表的开头。 为此,我尝试了下面的代码,

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Collection.Add(new TempObject() { Name = "new item" });
        comboBox1.SelectedIndex = -1;
    }

这样做不会将滚动条设置到列表的开头。 我尝试清除列表并重新填充,但仍然无法使用。

请帮助....

应用BringIntoView后:

 private void button1_Click(object sender, RoutedEventArgs e)
        {
            Collection.Clear();
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });
            Collection.Add(new TempObject() { Name = "testItem" });

            comboBox1.SelectedIndex = -1;

            ComboBoxItem item = comboBox1.ItemContainerGenerator.ContainerFromIndex(0) 
                                                                       as ComboBoxItem;

            if (item != null) item.BringIntoView();
     }

这将始终为ComboBoxItem项目返回null。


尝试这个:

comboBox1.Items[0].BringIntoView();

使用“我想将光标设置到列表的开头”您是否想要将组合框的选定项目设置为第一项? 然后将其设置为索引0,索引-1意味着没有选择。

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    Collection.Add(new TempObject() { Name = "new item" }); 
    comboBox1.SelectedIndex = 0; 
} 

在您的评论之后更新:由于您的组合框是数据绑定的,因此您可以使用ItemContainerGenerator获取第一个项目。 这只有在项目已经被渲染时才有效,即下拉列表已被打开。

private void button1_Click(object sender, RoutedEventArgs e)  
{  
   Collection.Add(new TempObject() { Name = "new item" });  
   comboBox1.SelectedIndex = -1;  
   ComboBoxItem item = comboBox1.ItemContainerGenerator.ContainerFromIndex(0) as ComboBoxItem;
   if (item != null) item.BringIntoView();
}  

另一个更简单的方法是选择第一个项目,然后取消选择它。

private void button1_Click(object sender, RoutedEventArgs e)  
{  
    Collection.Add(new TempObject() { Name = "new item" });  
    comboBox1.SelectedIndex = 0;  
    comboBox1.SelectedIndex = -1;  
}
链接地址: http://www.djcxy.com/p/41251.html

上一篇: WPF Combobox current scroll position does not change

下一篇: WPF vs Silverlight