Модераторы: gambit, Kefir, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WPF UI в System.Addin, кто-нибудь так пробовал? 
V
    Опции темы
Partizan
Дата 18.6.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Добрый день...
собственно вопрос в следующем: есть ли возможность запихнуть какойнить WPF UI...ну допустим DockPanel с размещённой на ней элементами в Add-in(System.Addin), чтобы потом Хост-приложение могло размещать эту докпанель на себе и чтобы эта докпанель была полноценным элементом хост-приложения...
читал мсдн...там описаны ограничения, которые не позволяют делать с UI расположенным в Addin некоторые вещи...например такие как трансформация...

так вот может у когонить удачно получалось с использованием System.Addin разносить элементы UI по разным сборкам?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Partizan
Дата 21.6.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



=) судя по довольно маленькому количеству ответов, никто UI-parts приложения в System.Addin не запихивал...
в общем UI я туда запихнул...только когда я его дёргаю из плагина и располагаю на форме, он выглядит как обычный WinForms контрол...и никакие стили к нему почему-то не применяются...

мож кто знает как это обойти?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Kefir
Дата 21.6.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



Partizan, не работал с аддинами. Вообще, пока что не очень хорошо понимаю что ты пытаешься сделать. что значит "запихнуть какойнить WPF UI"?
PM MAIL WWW Skype   Вверх
Partizan
Дата 22.6.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



суть такова:
1)есть некоторое приложение-хост...оно представляет собой главную форму...
2)есть множество других приложений, которые оформлены как add-inы...каждое из этих приложений имеет UI(Grid с дочерними элементами), который при желании может дёргаться хостом для последующего расположения в некой области главной формы.

так как Хост и Add-in загружаются в разные домены, то дёргать UI из Add-inов приходится через методы FrameworkElementAdapters::ViewToContractAdapter и FrameworkElementAdapters::ContractToViewAdapter...таким образом UI пересекает границы домена в который загружен Addin  и попадает в домен Хоста. В результате получается экземнляр некоего класса обёртки MS.Internal.Control.AddInHost(фактически насколько я понимаю передаётся просто hwnd UIElement-а и располагается на главной форме так же как и обычный WinForms контрол) =(


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Partizan
Дата 22.6.2008, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



в общем проблема со кастомным стайлингом UI-партов из addin-а решилась, но появилась другая:

надо чтобы UI выдернутый из add-inа наследовал стиль хост-окна...но и с этим я наверно справлюсь...
на днях отпишу что и как из этого получится...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Partizan
Дата 27.6.2008, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



всё получилось, всё отлично...
скажу лишь что задача реализуема ибо описать всё вкраце очень тяжело.
так что если у кого-то будут подобные проблемы, обращайтесь =)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
jonie
Дата 30.6.2008, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



sample дай) интересно ж...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Partizan
Дата 30.6.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Всё будет =) только попозже чуть) на выходных не было времени писать статью)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
lehin
Дата 2.4.2009, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



sample очень уж хочется увидеть) 
могу выложить свой пример - если есть время, хотелось бы услышать совет (как в приложение с docking-панелью встроить addin с другим winforms контролом)
не смог (пока) решить проблему с эксепшеном в PresentationFramework, возникающим при перемещении docking-панели и некорректным отображением контрола (не растягивается внутри контейнера в отличии от контролов, создаваемых в том же домене)

спасибо
PM MAIL   Вверх
xxxSeVa
Дата 3.4.2009, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



Для plug-in'ов есть специально обученный framework - MAF Manager AddIn Framework with WPF
PM MAIL   Вверх
Partizan
Дата 3.4.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



xxxSeVa, MAF == System.Addin....в топике о нём и речь...


lehin, руки пока дошли написать только одну статью о System.Addin...на подходе вторая...
но взаимодействие с UI-ными элементами из других доменов будет где-то в 3-й или 4-й статьях, которые, скорее всего будут в начале мая...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Idsa
Дата 3.4.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 2
Всего: 62



Последняя тенденция - ругать System.AddIn, хвалить MEF.

Partizan, может, ну его этот System.AddId? ;)


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Partizan
Дата 3.4.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Idsa, нет-нет ) Это взаимодополняющие технологии..Основная фича System.Addin - изоляция плагинов... MEF обеспечивает другие вещи, очень, кстати сладкие, но не обеспечивает того, что даёт System.Addin smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
xxxSeVa
Дата 3.4.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



Да, MEF совсем из другой серии.А зачем вам нужна эта изоляция в купе с дополнительными тормозами?Простой загрузки модулей по требонию не достаточно?Трудно представить вариант,где выгрузка критична.
PM MAIL   Вверх
Partizan
Дата 3.4.2009, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



xxxSeVa

если я разработчик некоего программного комплекса и у моего комплекса есть некоторый Public API, а я не хочу, чтобы бажные плагины сторонних разработчиков отваливали моё приложение, то использование изоляции было бы полезно


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Idsa
Дата 3.4.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 2
Всего: 62



Partizan, я не работал ни с System.AddIn, ни с MEF... но из твоих слов сделал вывод, что MEF загружает сборку в родительский домен, а System.AddIn - в свой собственный. Так ли это?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Partizan
Дата 3.4.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Idsa, System.Addin может загружать либо в родительский домен, либо в новый домен, либо в отдельный процесс


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Idsa
Дата 3.4.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 2
Всего: 62



Partizan, а MEF?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Partizan
Дата 3.4.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Idsa, ну а MEF загружает в родительский smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Idsa
Дата 3.4.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 2
Всего: 62



Цитата(Partizan @  3.4.2009,  20:31 Найти цитируемый пост)
ну а MEF загружает в родительский smile

А чем вызвано такое ограничение?

Цитата(Partizan @  3.4.2009,  16:53 Найти цитируемый пост)
Основная фича System.Addin - изоляция плагинов... MEF обеспечивает другие вещи, очень, кстати сладкие, но не обеспечивает того, что даёт System.Addin smile

А чего еще не дает MEF по сравнению с System.AddIn?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Partizan
Дата 3.4.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Цитата

А чем вызвано такое ограничение?


Idsa, у MEF  задачи другие


Цитата

А чего еще не дает MEF по сравнению с System.AddIn


MEF  просто другой =) Если не нужна изоляция расширения, то я бы, конечно, посоветовал использовать MEF...
Если изоляция, которую предоставляет System.Addin не нужна, то функционал вполне можно реализовать с использованием MEF smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
lehin
Дата 3.4.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



все-таки позволю себе привести свой пример - может моя ошибка сразу будет заметна

есть у меня плагин:

    [AddIn("Visual plugin")]
    public class VisualPlugin1 : AddInView.VisualPlugin
    {
        private System.Windows.FrameworkElement _control;

        public override string Name
        {
            get { return "Visual plugin"; }
        }

        public override System.Windows.FrameworkElement GetControl()
        {
            _control = _control ?? new UserControl1();
            return _control;
        }
    }

есть у меня хост и в нем метод загрузки плагинов:

        public void LoadAddIns()
        {
            _plugins = new List<PluginBase>();

            String path = AppDomain.CurrentDomain.BaseDirectory;
            AddInStore.Rebuild(path);
            IList<AddInToken> visualTokens = AddInStore.FindAddIns(typeof(VisualPlugin), path);

            foreach (AddInToken token in visualTokens)
            {
                _plugins.Add(token.Activate<PluginBase>(AddInSecurityLevel.Host));
            }

            foreach (PluginBase plugin in _plugins)
            {
                VisualPlugin visualPlugin = plugin as VisualPlugin;

                SimpleForm simpleForm = new SimpleForm();
                simpleForm.SetChild(visualPlugin.GetControl());
                simpleForm.Show();
            }
        }

все необходимые промежуточные объекты (контракты, адаптеры и пр. - все что нужно для AddIn) на месте, плагин загружается
проблема в том, что на форме контрол выглядит очень убого - не растягивается (не занимает весь ElementHost), не наследует стили и т.д. UserControl1 представляет собой обертку над простым winforms контролом.
Если UserControl в том же домене - он естесственно занимает весь контейнер ElementHost.

Кстати пытался сделать свой addin для wpf-калькулятора (от команды разработчиков технологии addin) - тот же простейший контрол в их приложении выглядит опять-таки убого (теряет цвет при перерисовке, отсутствуют стили xp несмотря на вызов System.Windows.Forms.Application.EnableVisualStyles(); )

Может что-нибудь посоветуете? 
Спасибо!

PM MAIL   Вверх
Partizan
Дата 3.4.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



lehin, у вас и хост, и плагин на Windows Forms?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
lehin
Дата 4.4.2009, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



да, оба на winforms
wpf мне нужен только для передачи между доменами
соответственно, как и в примере, передаю wpf-контрол через INativeHandleContract

правда, та же проблема у меня возникает и при создании плагина с родными wpf-контролами - они точно так же не растягиваются

в конечном счете мне хотелось бы в качестве контейнера использовать DockContent с ElementHost (в приведенном примере - обычная форма с заполняющим ElementHost). Переданные через границу доменов контролы при изменении положения DockContent-панели (при любом изменении расположения панели) приводят к исключению в PresentationFramework (при этом кстати сама панель остается жить, но внутрии нее содержимое исчезает). Соответственно, контролы, созданные в том же домене ведут себя абсолютно нормально (растягиваются на всю панель, не выдают исключение при перемещении панели, выглягят в том же стиле)
PM MAIL   Вверх
Partizan
Дата 4.4.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



lehin, я думаю, что передачу между доменами можно как-нибудь осуществить и без оборачивания в FrameworkElement...если с обеих сторон WinForms, то нет смысла контролы оборачивать...потому что при использовании WPF System.Addin накладывает некоторые ограничения

http://msdn.microsoft.com/en-us/library/bb...odelLimitations


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
lehin
Дата 4.4.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



а разве есть что-то для передачи контролов между доменами? вариант с разделением на слои модель-вид-представление отпадает сразу
да и в принципе ограничения не настолько критичны в том случае, если основное приложение служит только для запуска addin-ов
если не сложно, может быть покажете пример winforms-хост - wpf-addin?
PM MAIL   Вверх
lehin
Дата 4.4.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



или пример wpf-хост - winforms-addin? 
на мсдн все примеры wpf-wpf. Когда меню в их addin-е контрол с чистого wpf на обертку winforms - опять те же грабли (после перерисовки контрол меняет цвет)
PM MAIL   Вверх
lehin
Дата 4.4.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



спасибо, кстати, за ссылку - посмотрел я примеры которые там приведены и попытался их в своем winforms приложении захостить. опять получил исключение (см. аттач)
но уже по крайней мере контрол из другого домена весь контейнер занимает)

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  1.jpg 49,32 Kb
PM MAIL   Вверх
lehin
Дата 4.4.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



нашел некоторое решение своей проблемы - для объекта DockPanel (http://sourceforge.net/projects/dockpanelsuite/) изменил свойство DocumentStyle со стандартного DockingMdi на DockingWindow - теперь исключение не выдается. 
Осталась единственная проблема - смена цвета фона контрола при перерисовке.
PM MAIL   Вверх
Partizan
Дата 9.4.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



lehin, совсем недавно наткнулся на статейку как раз о расширении WIndows Forms-приложения с помощью System.Addin

http://msdn.microsoft.com/ru-ru/magazine/cc700355.aspx


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
lehin
Дата 14.4.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



Цитата(Partizan @ 9.4.2009,  21:56)
lehin, совсем недавно наткнулся на статейку как раз о расширении WIndows Forms-приложения с помощью System.Addin

http://msdn.microsoft.com/ru-ru/magazine/cc700355.aspx

спасибо за ссылку

Жаль, конечно, что для встраивания объектов интерфейса из addin'а в основное приложение приходится использовать wpf - много памяти кушается, что называется, просто так. 
В принципе на данный момент я реализовал то, что хотел - прототип системы с подключаемыми модулями, логика работы которых изолирована. Из статьи еще раз убедился, что этот вариант архитектуры на данный момент единственно возможный. 

PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1850 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.