1

Используя следующую tutorial, в VSIX проекта, я создал окно WPF, который наследуется от Microsoft.VisualStudio.PlatformUI.DialogWindow, и я показываю это модален, используя следующий код:WPF модальное окно в Visual Studio Extension блокирует ввод

var myWindow = new MyWindow(myParameters); 
myWindow.ShowDialog(); 

Когда я компилирую это в режиме RELEASE и начинаю без отладки [Ctrl + F5], он открывает экспериментальную версию Visual Studio. Здесь я открываю другое решение, а затем выполняю свое Модальное окно. Окно работает очень хорошо - я могу печатать текстовые поля и т. Д.

Однако, когда я закрываю модальное диалоговое окно [используя this.Close()], проблемы начинаются. Если я перейду к одному из документов в открытом решении, я могу напечатать, но клавиши клавиатуры backspace [< -] и [Удалить] (и, возможно, другие тоже) просто игнорируются .... Я не могу удалить то, что я просто набрал!

Кроме того, когда я пытаюсь закрыть эту экспериментальную версию Visual Studio, я получаю следующее сообщение:

Microsoft Visual Studio обнаружило, что операция блокирует ввода данных пользователя. Это может быть вызвано активным модальным диалогом или задачей , которая должна блокировать взаимодействие пользователя. Вы все равно хотите закрыть ?

Но, насколько я могу судить, мое модальное окно было закрыто и, возможно, даже было мусором, собранным к моменту моего закрытия, чтобы закрыть этот экземпляр Visual Studio.

Это не ограничивается экспериментальной версией - когда я нажимаю этот VSIX в нашу локальную галерею и устанавливаю в качестве расширения, тогда я получаю то же поведение.

Я также попытался явно устанавливая владелец, но его не было никакого влияния на этой проблеме:

var myWindow = new MyWindow(myParameters) 
{ 
    Owner = Application.Curent.MainWindow 
} 
myWindow.ShowDialog(); 

Если я сделать это покадрово окном, то я получаю разные (но взаимозависимые) проблемы. Здесь, если я открою экспериментальную версию Visual Studio и откройте другое решение, где я перейду на страницу C#. Затем я открываю окно WPF расширения Extension, где я могу с радостью набирать TextBox в этом окне WPF. Тем не менее, всякий раз, когда я нажимаю backspace [< -] или клавиши [delete], это не влияет на текущее текстовое поле WPF, но ранее открытое окно кода C# в текущем решении. См. a previous post on this

Что мне не хватает?

ответ

2

следующее предложение найдено here, кажется, работает для меня:

IVsUIShell uiShell = (IVsUIShell)ServiceProvider.GetService(typeof(SVsUIShell)); 

uiShell.EnableModeless(0); 

var myWindow = new MyWindow(myParameters) 
{ 
    Owner = Application.Curent.MainWindow 
} 
myWindow.ShowDialog(); 

uiShell.EnableModeless(1); 
+0

Я рад знать, что вы решили эту проблему, и спасибо за обмен решения. Пожалуйста, отметьте это как ответ. Это будет очень полезно для других членов сообщества, у которых есть похожие вопросы. –

+0

Вы можете просто сделать свое окно из DialogWindow (в PlatformUI). –

Смежные вопросы