2008-10-08 33 views
2

我有一個WPF Interop和Excel Addin的奇怪錯誤。我正在使用.Net 3.5 SP1。在任務窗格中使用WPF組合框時不保持打開狀態

我正在使用外接程序快速爲Excel 2003創建自定義任務窗格。在該任務窗格中,我使用ElementHost來託管WPF UserControl。 UserControl只包含一個帶有TextBox和ComboBox的Grid。我的問題是,雖然一切正常顯示,但組合框不會保持下降,除非我把鼠標放在向下箭頭上。

我不相信這一定與外接快車有關,因爲當我嘗試在Excel中無模式顯示WPF窗口時遇到類似問題。

第二個問題是ComboBox似乎不願意放棄焦點。如果我點擊它,文本區域變灰,表示它具有焦點,但我無法移動窗口中其他任何位置的焦點。爭奪焦點的唯一方法是移動鼠標滾輪。

其他人有類似的問題,並設法解決它?

回答

4

Add-in Express爲我研究了這一點,事實證明它與添加到Excel中的任務窗格的窗口樣式有關。如果關閉Windows CreateParams中的WS_CHILD標誌,則Combo Boxes和其他彈出窗口按預期工作。

他們給了我這個代碼片段添加到我的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; 
    } 
} 
+0

我沒有外接表示,任何想法,這窗口自定義窗格(間諜++建議窗口'EXCEL2')。在這種情況下如何覆蓋它的風格? – 2013-09-15 07:29:27

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(); 
    } 
    
相關問題