代码之家  ›  专栏  ›  技术社区  ›  David

将键盘选择与列表框中的SelectedItem同步

  •  0
  • David  · 技术社区  · 15 年前

    使用Silverlight列表框时,我可以通过分配给SelectedItem或SelectedIndex以编程方式选择项目,并且可以确保使用ScrollIntoView方法对用户可见所选项目。

    执行此操作时,将正确选择项目(该项目的背景为蓝色),但键盘焦点仍留在列表中的第一个项目上(第一个项目具有虚线边框)。结果是,当用户按下向上或向下键更改选择时,选择将跳到顶部。

    如何更改列表框控件中的“焦点”项,使其与刚可编程选择的项相匹配?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Jim McCurdy    15 年前

    尝试在列表框容器中的所需事件发生后(加载时等)调用列表框上的自定义焦点设置函数(focusex)。

    internal static class ControlExt
    {
        // Extension for Control
        internal static bool FocusEx(this Control control)
        {
            if (control == null)
                return false;
    
            bool success = false;
            if (control == FocusManager.GetFocusedElement())
                success = true;
            else
            {
                // To get Focus() to work properly, call UpdateLayout() immediately before
                control.UpdateLayout();
                success = control.Focus();
            }
    
            ListBox listBox = control as ListBox;
            if (listBox != null)
            {
                if (listBox.SelectedIndex < 0 && listBox.Items.Count > 0)
                    listBox.SelectedIndex = 0;
            }
    
            return success;
        }
    }
    

    这对你很有用。

    祝你好运,
    吉姆麦克寇迪
    YinYangMoney