2

我对 WPF 互操作和 Excel 插件有一个奇怪的错误。我正在使用.Net 3.5 SP1。

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

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

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

其他人有类似的问题,并设法解决它?

4

2 回答 2

4

Add-in Express 为我调查了这个问题,结果发现它与添加到 Excel 的任务窗格的窗口样式有关。如果您关闭 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;
    }
}
于 2009-03-30T14:44:43.980 回答
0

我有同样的问题。我有一个 WPF 用户控件托管在 WinForm 用户控件中,整个是一个 Excel 插件。我使用 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();
    } 
    
于 2011-03-04T09:31:23.397 回答