Запуск WPF

Sample

Client
Регистрация
31.01.2016
Сообщения
25
Благодарностей
4
Баллы
3
Всем привет. Такой вопрос:
Я написал небольшое WPF-Window в VS и собрал его в dll-ку (удалил класс App и сделал тип приложения "Библиотека классов" ). Теперь я хочу запустить это Window в Zenno из C# блока. Какие шаги я должен для этого выполнить?

В проект Zenno я уже добавил следующие References:
  • System.Xaml
  • PresentationFramework
  • PresentationCore
  • WindowsBase
+ конечно саму библиотеку.
В c# блоке я написал следующее:

Код:
//var app = new System.Windows.Application();
var app = System.Windows.Application.Current;
app.Run(new MyForm());
Первый раз у меня запустилось только таким образом. Если же я пытался создать приложение, то вылезала ошибка, что приложение может быть создано только один раз.
После перезагрузки компа стало наоборот - Application.Current = null. Соответственно не очень понятно почему так? Я предполагаю, что это из-за того, что до это я запускал WPF из VS и этот Application каким-то образом остался в памяти.

PS. Сейчас запустил приложение с первой строчкой (создание нового Application), закрыл, создалось впечатление, что всё ок, однако следующий запуск опять показал ошибку, что Application уже создан. При попытке же запустить проект со второй строчкой - показалась ошибка:
Выполнение действия CSharp OwnCode Идет завершение работы объекта Application.
Соответственно вопрос - как корректно завершать выполнение?
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
хм, а почему просто в библиотеку классов не пихнуть все?
 

Sample

Client
Регистрация
31.01.2016
Сообщения
25
Благодарностей
4
Баллы
3
хм, а почему просто в библиотеку классов не пихнуть все?
ты имеешь ввиду сбилдить мою библиотеку уже с System.Xaml, PresentationFramework и т.п.? Тогда просто я не знаю как. Думал, что раз WPF из VS запускается, то все эти зависимости и так будут.
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
Неужели хочешь форму наклепать с красивостями))? Конечная цель какая
 

Sample

Client
Регистрация
31.01.2016
Сообщения
25
Благодарностей
4
Баллы
3
Неужели хочешь форму наклепать с красивостями))? Конечная цель какая
ну собственно говоря да. Необходимо появление окна, с которым пользователь бы мог взаимодействовать.
Понятно, что выход - это использовать WinForms, но просто форма уже сделана на WPF и не хочется переделывать.

@rostonix , может ты чего подскажешь?
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
824
Баллы
93
WPF форма это что? Обычный класс.
Только в WPF сделана разбивка на файл xaml и собственно сам код C#.

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

Дальше уже в шаблоне создаем объект нашего окна.
И к различным элементам этого окна уже привязываем хэндлеры.
Естественно эти элементы должны быть публичными(по умолчанию они приватные), иначе до них не "достучаться".
Код:
var wnd = new MyWindow();
wnd.Button1.Click += (sender, args) => { ... };
Все это можно сделать прямо в C# экшене.
Но лучше в OwnCode сделать вспомогательный класс.
Чтобы удобнее было, и чтобы обработчики привязывать не через анонимные методы(т.к. тогда все в кашу), а через именованные.
Как то так.
Код:
  public class Loader
   {
     public MyWindow Mw { get; set; }

     public Loader()
     {
       Mw = new MyWindow();
       Mw.Button1.Click += btnButton1_Click;
     }

     private void btnButton1_Click(object sender, RoutedEventArgs e)
     {
       ...
     }
   }
Потом в экшене C# пишем.
Код:
var loader = new Loader();
loader.Mw.ShowDialog();
 
  • Спасибо
Реакции: Art4D, shtift и Sample

Sample

Client
Регистрация
31.01.2016
Сообщения
25
Благодарностей
4
Баллы
3
@Moadip, спасибо большое!
Пока проверить не могу, но проверю позже.
Т.е. app.Run(); вообще не нужен. Тогда ясно.
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)