【问题标题】:WPF ComboBox doesn't stay open when used in a Task PaneWPF ComboBox 在任务窗格中使用时不会保持打开状态
【发布时间】:2012-11-28 13:16:53
【问题描述】:

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

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

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

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

还有其他人遇到过类似的问题并设法解决了吗?

【问题讨论】:

    标签: wpf excel interop


    【解决方案1】:

    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;
        }
    }
    

    【讨论】:

    • 我没有 Add-In express,不知道哪个窗口是自定义窗格(spy++ 建议窗口'EXCEL2')。在这种情况下如何覆盖它的样式?
    【解决方案2】:

    我遇到了同样的问题。我有一个 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();
      } 
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 2019-01-03
      • 2012-05-10
      • 1970-01-01
      • 2017-01-15
      相关资源
      最近更新 更多