【问题标题】:keep focus in a WPF combo box in an addin在插件的 WPF 组合框中保持焦点
【发布时间】:2010-06-02 22:25:46
【问题描述】:

我在 Word 插件中有一个组合框。组合框的内容通常足够长以覆盖 Word 的缩放滑块控件。但是,直接选择缩放控件上方的项目(从视图中隐藏)会导致缩放控件获得焦点、关闭组合框并更改缩放设置!组合框中的选择保持不变。

如何使组合框保持焦点并将所选值更改为所选项目(在缩放栏上)?谢谢...

【问题讨论】:

    标签: c# wpf wpf-controls add-in


    【解决方案1】:

    我在使用 WPF 时也遇到过同样的问题,它看起来与 Word 处理来自子窗口的事件的方式有关。每当下拉列表(或可能任何其他“弹出”控件,如上下文菜单)被绘制在 Word 的一个窗口上时,它会变得有点贪婪,并假设您正在单击底层窗口。

    我不太了解消息传递/事件在 Windows 中的工作原理,而且我还没有时间找出解决问题的最佳方法,但根据某处关于创建无边框窗口的帖子,我尝试修改WinForms用户控件的窗口样式如下(windows style constants from http://www.pinvoke.net/default.aspx/Constants/Window%20styles.html):

        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams p = base.CreateParams;
                if (!DesignMode)
                {
                    unchecked
                    {
                        p.Style = (int)(WindowStyles.WS_VISIBLE |
                                        WindowStyles.WS_POPUP |
                                        WindowStyles.WS_CLIPSIBLINGS |
                                        WindowStyles.WS_CLIPCHILDREN);
                    }
                }
                return p;
            }
        } 
    

    奇怪的是(或者对于更熟悉 Windows 消息的人来说可能不那么奇怪),下拉列表确实响应键盘事件(例如,单击以弹出列表,然后使用键盘选择一个项目)。

    从功能上看,上面的代码似乎没有问题......但我不确定说用户控件是弹出窗口而不是孩子的后果是什么。

    与此相关的另一个帖子是WPF ComboBox doesn't stay open when used in a Task Pane

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 1970-01-01
      • 2021-10-27
      • 2020-03-18
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多