#wpf #winforms #mvvm #c#-4.0 #vsto
#wpf #winforms #mvvm #c #-4.0 #vsto
Вопрос:
у меня есть несколько вопросов о WPF MVVM ElementHost. Я пытаюсь объяснить это настолько ясно, насколько могу.
-
Я создаю надстройку (VSTO 2010), это означает, что мне нужен ElementHost для размещения WPF.
-
Первый пункт означает, что мой WPF может быть только UserControl (WPF)
-
Что касается пунктов 1 и 2 ;
Возможно ли создать MVVM WPF (UserControl), имеющий всплывающие окна (дочерние элементы), подобные этому одному, и который может быть размещен на элементном хостинге?
Я надеюсь, что мой вопрос достаточно ясен! Спасибо за помощь.
Ответ №1:
Вы, конечно, можете, хотя есть несколько ошибок.
У меня были проблемы с тем, что мой элемент управления WPF не отображался при первоначальном отображении, поэтому я решил это, изменив ширину при установке дочернего элемента. Смотрите http://vstocontrib.codeplex.com/SourceControl/changeset/view/50a83624e34d#src/VSTOContrib.Core/Wpf/WpfPanelHost.cs
Далее следует приложение в стиле MVVM, которое вы хотите создать, основная проблема заключается в модели VSTO для Windows / документы / пользовательские панели задач все разные, одна основана на открытой книге (контекст), другая — на Windows (просмотр), а пользовательские панели задач также основаны на окне (просмотр). Приложения в стиле MVVM больше ориентированы на текущий контекст или текущую открытую книгу, я уже некоторое время работаю над VSTO contrib, чтобы решить эту проблему, он даже предоставляет вам привязки, подобные MVVM, при объявлении ваших RibbonXML-лент, если вам нужна поддержка ribbon. Возьмите его на http://vstocontrib.codeplex.com и, пожалуйста, дайте мне знать, если это действительно поможет вам.
И, наконец, всплывающее окно, вас ничто не останавливает, но в Office 2007 вы обнаружите, что при попытке открыть окно во второй раз Office, вероятно, выйдет из строя. Следующий код сделает работу вашего окна WPF немного более плавной.
if (System.Windows.Application.Current == null)
new Application { ShutdownMode = ShutdownMode.OnExplicitShutdown };
else
System.Windows.Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
В принципе, когда вы показываете первое окно, все хорошо, но WPF запускает приложение, которое по умолчанию завершается при закрытии последнего окна. Поэтому, когда ваше окно закроется, а затем вы попытаетесь открыть его снова, WPF взорвется: P
Комментарии:
1. Я вижу ваш проект Codeplex, но я не знаю, как его использовать! Я просто хочу создать MVVM WPF, который можно разместить на панели VSTO. Не могли бы вы показать мне, пожалуйста, как я могу это сделать? спасибо!
2. При загрузке исходного кода доступно несколько примеров проектов. Вы не упомянули, на какой продукт Office вы ориентируетесь, но есть примерный проект Outlook и word, с которого вы сможете начать.
3. Взгляните на vstocontrib.codeplex.com/SourceControl/changeset/view /…
4. У меня была такая же проблема с плагином Visual Studio, который убивал VS при попытке повторно открыть всплывающее окно WPF. Спасибо!