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