Как я могу показать окно wpf в надстройке vsto?

Я впервые переношу свой код VBA на VSTO, чтобы создать надстройку COM для Excel. Мне удалось преобразовать весь код в vb. К сожалению, у меня возникают трудности с созданием формы Windows в VS2017. Я попытался добавить форму Windows, но не вижу никакой формы Windows. Вместо этого я мог добавить только User Control (WPF).

Мне удалось создать форму с помощью XAML, но самая большая проблема, с которой я столкнулся, - как инициализировать форму.

Импорт приведен ниже.

Imports Microsoft.Office.Interop.Excel
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Windows.Forms

Я вижу следующие ошибки в приведенном ниже коде

Обрабатывает MyBase.Load -> Событие «Загрузка» не найдено.

Я не вижу, чтобы после этого ничего работало. Может кто-нибудь объяснить мне, как мы справляемся с загрузкой и выгрузкой пользовательского элемента управления (WPF). Также почему я не могу импортировать форму Windows.

Private Sub UserControl1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim RefSht As Object
    Dim TableList() As String
    Dim IDTable As String
    Dim count As Integer : count = 0
    Dim TextBox1 As System.Windows.Controls.TextBox
    Dim TextBox2 As System.Windows.Controls.TextBox
    Dim TextBox3 As System.Windows.Controls.TextBox
    Dim TextBox4 As System.Windows.Controls.TextBox
    Dim TextBox5 As System.Windows.Controls.TextBox
    Dim TextBox6 As System.Windows.Controls.TextBox
    Dim cmbIDTable As System.Windows.Controls.ComboBox

    Dim wb As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook
    RefSht = wb.Worksheets("RefSheet")

    On Error Resume Next
    IDTable = ReportSheet.Range("IDTable")
    TextBox1.Text = ReportSheet.Range("Title")
    TextBox2.Text = ReportSheet.Range("Component")
    TextBox3.Text = ReportSheet.Range("Selection")
    TextBox4.Text = ReportSheet.Range("Parameters")
    TextBox5.Text = ReportSheet.Range("Summary")
    TextBox6.Text = ReportSheet.Range("Category")

    TableList = Split(GetTableListData(), ";")
    cmbIDTable.ItemsSource = TableList
    While IDTable <> TableList(count)
        count = count + 1
    End While
    cmbIDTable.SelectedItem = count
End Sub

Как вы пытались создать форму Windows? Вы хотите добавить форму в свой проект (как пользовательскую форму VBA) или создать ее на лету, во время выполнения? А Windows Form или WPF - это не одно и то же.

Cindy Meister 11.04.2018 13:36

@CindyMeister Я хочу, чтобы форма оставалась на заднем плане и появлялась при нажатии кнопки на ленте. Поскольку я новичок в WPF, я предпочитаю изучить WPF. Любые идеи.

Raghu 11.04.2018 14:10

Я настоятельно рекомендую НЕ использовать On Error Resume Next, особенно когда что-то «не работает». Плохая привычка. В .NET вы должны использовать блоки Try ... Catch.

Cindy Meister 11.04.2018 14:32

Думаю, вы найдете ответ на свой основной вопрос: как показать окно WPF в надстройке VSTO - в этом SO Q&A: stackoverflow.com/questions/10164140/…. Вы также можете найти следующие полезные: blogs.msdn.microsoft.com/andreww/2007/08/15/wpf-in-vsto, msdn.microsoft.com/en-us/library/bb772076.aspx

Cindy Meister 11.04.2018 14:33
1
4
714
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После множества проблем, связанных с этой проблемой, я обнаружил, что Windows Form не была установлена ​​в моем VS. Я включил пакет и теперь могу работать.

Другие вопросы по теме