ОШИБКА: невозможно выбрать даты в DatePicker, выходящие за пределы плавающей надстройки VSTO

Я зарегистрировался проблема с Microsoft здесь - репро доступен для скачивания: https://connect.microsoft.com/VisualStudio/feedback/details/741454/value-change-event-doesnt-fire-for-datetimepicker-controls-used-in-vsto-add-ins

Если вы поместите DateTimePicker в плавающую надстройку Excel VSTO, Вставьте и расположите его так, чтобы когда календарь опускался вниз, он находился за пределами надстройки, см. здесь:

enter image description here

Выбор любой из дат, обведенных зеленым, работает, как и ожидалось, но при нажатии любой даты, обведенной красным, он просто закрывает раскрывающийся список календаря и не устанавливает дату!

Кто-нибудь знает, как это исправить?

Изменить

Этот пользователь SO столкнулся с проблемой при использовании WPF: VSTO WPF ContextMenu.MenuItem Щелкните вне панели задач, не поднятой

enter image description here

Ответ на этот вопрос показывает, что о проблеме сообщалось при подключении некоторое время назад, но до сих пор нет решения с VSTO 4.0 SP1: https://connect. microsoft.com/VisualStudio/feedback/details/432998/excel-2007-vsto-custom-task-pane-with-wpf-context-menu-has-focus-problems

Одним из обходных путей является использование DispatcherFrame для прокачивать сообщения и подписываться на GotFocusEvent и LostFocusEvent для получения меню. http://blogs.msdn.com/b/vsod/archive/2009/12/16/excel-2007-wpf-events-are-not-fired-for-items-that-overlap-excel-ui -for-wpf-context-menus.aspx, но это весь код WPF для меню, а не решение для Winform DateTimePicker.

Репродукция для Microsoft Connect:

Новый проект > Надстройка Excel 2010

using TaskPane;
using Microsoft.Office.Core;

namespace ExcelAddIn2
{
public partial class ThisAddIn
{
    TaskPaneView MyTaskView = null;
    Microsoft.Office.Tools.CustomTaskPane MyTaskPane = null;

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    //setup custom taskpane
    MyTaskView = new TaskPaneView();
    MyTaskView.currentInstance = Globals.ThisAddIn.Application;
    MyTaskPane = this.CustomTaskPanes.Add(MyTaskView, "MyTaskView");
    MyTaskPane.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionFloating;
    MyTaskPane.DockPositionRestrict = MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange;
    MyTaskPane.Visible = true;
}
}

Меню «Файл» > «Добавить» > «Новый проект» > «Библиотека классов» > с именем TaskPane

Затем в проекте TaskPane создайте пользовательский элемент управления с именем TaskPaneView

public partial class TaskPaneView : UserControl
{
    public TaskPaneView()
    {
        InitializeComponent();
    }

    public Microsoft.Office.Interop.Excel.Application currentInstance { get; set; }

    public TaskPaneCtrl getTaskPaneCtrl
    {
        get { return this.taskPaneCtrl1; }
    }  

}

Затем создайте пользовательский элемент управления с помощью DateTimePicker, убедитесь, что элемент управления «Календарь» расположен в правом нижнем углу пользовательского элемента управления.

public partial class TaskPaneCtrl : UserControl
{
public TaskPaneCtrl()
{
    InitializeComponent();
}
}

В библиотеке классов TaskPane сошлитесь на Excel Interop (например, c:\Program Files x86\Microsoft Visual Studio). 14.0\Visual Studio Tools для Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll).

Создайте решение. Комментирование неработающих частей. Построить решение.

Теперь перетащите TaskPaneCtrl в TaskPaneView и раскомментируйте то, что не удалось скомпилировать.

enter image description here

F5 и щелкните элемент управления календарем, теперь попробуйте выбрать дату, которая находится за пределами области задач. Событие No Value Change срабатывает, оно ведет себя как щелчок за пределами календаря!

Примечание. Я попробовал выпадающий список, который выпадает из элемента управления, но его события СРАБАТЫВАЮТ!

10
задан halfer 25 November 2019 в 23:26
поделиться