【问题标题】:Synchronize keyboard selection with SelectedItem in ListBox将键盘选择与 ListBox 中的 SelectedItem 同步
【发布时间】:2009-12-16 14:08:06
【问题描述】:

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

这样做会正确选择项目(该项目的背景为蓝色),但键盘焦点留在列表中的第一个项目上(第一个项目有虚线边框)。结果是当用户按下向上或向下改变选择时,选择跳到顶部。

如何更改 ListBox 控件中的“聚焦”项以匹配我刚刚以可编程方式选择的项?

【问题讨论】:

    标签: silverlight silverlight-3.0 listbox


    【解决方案1】:

    在列表框容器中的所需事件(加载等)之后,尝试在列表框上调用我的自定义焦点设置函数 (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

    【讨论】:

    • 这是可行的,但重要的是在使用 FocusEx 之后进行选择和 ScrollTo 调用 - 之前进行滚动会导致键盘焦点变得更不可预测(键盘焦点似乎被绘制到顶部最明显的项目)
    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2014-10-04
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多