可以说,左边的是lbLeft,右边的是lbRight。左边的“>”按钮将一个选定的项目从lbLeft添加到lbRight。并且,“<”从列表中删除所选项目形式lbRight。
“>>”将所有项目从lbLeft添加到lbRight和“<<”清除lbRight。
当我双击lbLeft中的一个项目时,它会被添加到lbLeft中,并且新添加的项目是聚焦。此外,如果我尝试从lbLeft中添加已存在于lbRight中的项目,则会将焦点放在该选定项目中(以便不重复项目)。但是当在lbRight中添加大量项目时,我必须手动向下滚动到放置焦点的位置。如何将listbox
自动滚动到焦点所在的位置?
我做了以下几点:
private void select_Click(object sender, RoutedEventArgs e) // > button
{
addingItemToSelectedList();
}
private void remove_Click(object sender, RoutedEventArgs e) // < button
{
if (lbRight.SelectedItem != null) {
lbRight.Items.RemoveAt(lbRight.SelectedIndex);
}
}
private void selectall_Click(object sender, RoutedEventArgs e) // >> button
{
lbRight.Items.Clear();
foreach (string item in column1) {
lbRight.Items.Add(item);
}
}
private void lbLeft_MouseDoubleClick_1(object sender, MouseButtonEventArgs e)
{
addingItemToSelectedList();
}
private void addingItemToSelectedList() {
if (lbLeft.SelectedItem != null)
{
string item = lbLeft.SelectedItem.ToString();
addFocus(item);
}
}
private void addFocus(string item) {
if (!lbRight.Items.Contains(item))
{
lbRight.Items.Add(item);
lbRight.SelectedIndex = lbRight.Items.Count - 1;
lbRight.Focus();
}
else
{
int index = lbRight.Items.IndexOf(item);
lbRight.SelectedIndex = index;
lbRight.Focus();
}
}
private void removeall_Click_1(object sender, RoutedEventArgs e) //<< button
{
lbRight.ItemsSource = null;
lbRight.Items.Clear();
}
代码中的column1是填充lbLeft的项目列表
更新:
我试图使用lbRight.ScrollIntoView(lbRight.SelectedIndex);
但它没有效果
答案 0 :(得分:1)
ScrollIntoView()
现在工作了。我必须做的是:
lbRight.ScrollIntoView(lbRight.Items[lbRight.SelectedIndex]);
它现在传递实际项目而不是它的索引。