我在代码隐藏文件中有一个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。
答案 0 :(得分:1)
试试这个:
comboBox1.Items[0].BringIntoView();
答案 1 :(得分:0)
使用“我想将光标设置到列表的开头”,您是否想要将组合框的选定项目设置为第一项?然后将其设置为索引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;
}