【发布时间】:2010-06-02 22:25:46
【问题描述】:
我在 Word 插件中有一个组合框。组合框的内容通常足够长以覆盖 Word 的缩放滑块控件。但是,直接选择缩放控件上方的项目(从视图中隐藏)会导致缩放控件获得焦点、关闭组合框并更改缩放设置!组合框中的选择保持不变。
如何使组合框保持焦点并将所选值更改为所选项目(在缩放栏上)?谢谢...
【问题讨论】:
标签: c# wpf wpf-controls add-in
我在 Word 插件中有一个组合框。组合框的内容通常足够长以覆盖 Word 的缩放滑块控件。但是,直接选择缩放控件上方的项目(从视图中隐藏)会导致缩放控件获得焦点、关闭组合框并更改缩放设置!组合框中的选择保持不变。
如何使组合框保持焦点并将所选值更改为所选项目(在缩放栏上)?谢谢...
【问题讨论】:
标签: c# wpf wpf-controls add-in
我在使用 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。
【讨论】: