WPF ComboBox не остается открытым при использовании в панели задач - PullRequest
2 голосов
/ 08 октября 2008

У меня странная ошибка с WPF Interop и надстройкой Excel. Я использую .Net 3.5 SP1.

Я использую Add-in Express для создания настраиваемой панели задач для Excel 2003. В этой области задач я использую ElementHost для размещения WPF UserControl. UserControl просто содержит Grid с TextBox и ComboBox. Моя проблема в том, что, хотя все отображается правильно, ComboBox не останется выпадающим, если я не удерживаю мышь над стрелкой вниз.

Не думаю, что это обязательно связано с надстройкой Express, потому что у меня была похожая проблема при попытке немодального отображения окна WPF в Excel.

Вторая проблема заключается в том, что ComboBox, похоже, не хочет расставаться с фокусом. Если я щелкну по нему, область текста станет серой, чтобы указать, что она имеет фокус, но я не могу переместить фокус в другом месте окна. Единственный способ отвлечь внимание - переместить колесико мыши.

У кого-нибудь еще была подобная проблема, и ей удалось ее исправить?

Ответы [ 2 ]

4 голосов
/ 30 марта 2009

Add-in Express изучил это для меня, и оказалось, что он как-то связан со стилем окна панели задач, который добавляется в Excel. Если вы отключите флаг WS_CHILD в Windows CreateParams, то комбинированные блоки и другие всплывающие окна будут работать как положено.

Они дали мне этот фрагмент кода для добавления в мою панель ADXExcelTaskPane:

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 голосов
/ 04 марта 2011

У меня была такая же проблема. У меня есть пользовательский элемент управления WPF, размещенный в пользовательском элементе управления WinForm, и в целом это Excel AddIn. Я работаю с Visual Studio 2010 и Excel 2007 и Excel 2010.

Моя проблема заключалась в том, что когда я щелкнул один раз в листе Excel, надстройка больше никогда не фокусировалась. Я нашел обходной путь.

  1. В конструкторе моего пользовательского элемента управления WinForm я регистрируюсь на событие MouseEnter моего пользовательского элемента управления WPF.
  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();
    } 
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...