在任务窗格中使用时,WPF ComboBox不会保持打开状态

时间:2008-10-08 14:23:31

标签: wpf excel interop

我有一个与WPF Interop和Excel Addin的奇怪错误。我正在使用.Net 3.5 SP1。

我正在使用Add-in Express为Excel 2003创建自定义任务窗格。在该任务窗格中,我正在使用ElementHost来托管WPF UserControl。 UserControl只包含一个带有TextBox和ComboBox的Grid。我的问题是,虽然一切正常显示,但ComboBox不会保持下拉状态,除非我将鼠标按住向下箭头。

我认为这不一定与Add-in Express有关,因为当我尝试在Excel中无模式显示WPF窗口时,我遇到了类似的问题。

第二个问题是ComboBox似乎不愿意放弃焦点。如果我单击它,文本区域将变为灰色以指示它具有焦点,但我无法将焦点移动到窗口中的任何其他位置。夺取焦点的唯一方法是移动鼠标滚轮。

其他人有类似的问题,并设法修复它?

2 个答案:

答案 0 :(得分:4)

Add-in Express为我查看了这个内容,结果发现它与添加到Excel的任务窗格的Window样式有关。如果您在Windows CreateParams中关闭WS_CHILD标志,则组合框和其他弹出窗口按预期工作。

他们给了我这段代码以添加到我的ADXExcelTask​​Pane:

private const uint WS_CHILD = 0x40000000;
private const uint WS_CLIPCHILDREN = 0x02000000;
private const uint WS_CLIPSIBLINGS = 0x04000000;

private CreateParams _CreateParams = new CreateParams();
protected override CreateParams CreateParams
{
    get
    {
        _CreateParams = base.CreateParams;
        if (!DesignMode)
            _CreateParams.Style = (int)(WS_CLIPCHILDREN | WS_CLIPSIBLINGS); //| WS_CHILD

        return _CreateParams;
    }
}

答案 1 :(得分:0)

我遇到了同样的问题。我有一个WinForm用户控件托管的WPF用户控件,整个是Excel AddIn。我使用Visual Studio 2010和Excel 2007以及Excel 2010。

我的问题是,当我在Excel工作表中单击一次时,AddIn永远不会再次获得焦点。 我找到了一个解决方法。

  1. 在我的WinForm用户控件的构造函数中,我在我的WPF用户控件的事件MouseEnter上注册。
  2. 在MouseEnter事件处理程序中,我将焦点放在自己身上(this.Focus())

    public WpfContainerUserControl()
    {
        InitializeComponent();
        GpecsBrowserTabUserControl gpecBrowser = elementHost1.Child as GpecsBrowserTabUserControl;
        gpecBrowser.MouseEnter += new System.Windows.Input.MouseEventHandler(gpecBrowser_MouseEnter);
    }
    
    void gpecBrowser_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        this.Focus();
    }