Создание пользовательского шаблона DockPanel в дизайнере

У меня есть приложение, в котором я хочу создать несколько DockPanel во время выполнения, но я хочу, чтобы все они следовали одному и тому же шаблону.

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

p.s. Я использую DevExpress v13.1 и WinForms на .NET 4.5 Framework.


person Jstone05    schedule 18.11.2013    source источник
comment
Я думаю, что DevEx API очень неинтуитивен, поэтому ожидается работа против API IMO. ;)   -  person IAbstract    schedule 19.11.2013
comment
aesthetically pleasing — Вы ищете WPF.   -  person Federico Berasategui    schedule 19.11.2013
comment
Ну, производительность имеет большое значение в приложении, которое я сейчас создаю. У меня и моих коллег сложилось впечатление, что производительность WPF оставляет желать лучшего, поэтому в данном случае winforms — неизбежное зло.   -  person Jstone05    schedule 19.11.2013
comment
Проблемы производительности @Jstone05 в WPF и winforms объясняются здесь. Подводя итог, winforms отстой. Правила WPF.   -  person Federico Berasategui    schedule 19.11.2013
comment
Я думаю, что лучший ответ - stackoverflow.com/a/19642453/210709 ... однако WPF не просто автоматически ответ на ваш вопрос и кажется немного не по теме, и некоторые мнения следует оставить невысказанными. Работа с DockPanels — это настоящая боль, но при правильном управлении она обеспечивает отличный пользовательский интерфейс. Можете ли вы опубликовать некоторые образцы того, что вы пробовали? Скриншот и часть кода?   -  person IAbstract    schedule 19.11.2013
comment
WPF, возможно, стоит изучить, и я взгляну на него, когда у меня будет время. Несмотря на это, мне нужно изучить оба варианта, и если WPF окажется непригодным для использования, я бы хотел подготовить альтернативу. Для понимания производительности, о которой мы здесь говорим, мое приложение в настоящее время обрабатывает ~ 20 000 записей в секунду в режиме реального времени и должно сделать серьезную попытку обработки 200 000 записей в секунду (крайний случай и только на короткое время, но еще)   -  person Jstone05    schedule 19.11.2013
comment
@IAbstract да, WPF автоматически избегает всех ужасных взломов, пыток, боли и кучи дерьма, связанного с отрисовкой владельца, которое требуется для чего-либо полезного в winforms.   -  person Federico Berasategui    schedule 19.11.2013
comment
@JStone05 Если вы имеете дело с большими наборами данных, возможно, вам стоит посмотреть этот короткий клип< /а>   -  person Federico Berasategui    schedule 19.11.2013
comment
@HighCore Хотя это интересно, наш опыт здесь совсем другой. Теперь я не специалист по WPF, но при сравнении его тестового приложения с моим (WinForm и WPF) мое могло публиковать данные в режиме реального времени так же быстро, как система могла их создать (33 миллиона записей в 20 секунд до достижения предела памяти для наших систем). Его Наоборот не отвечали задолго до того.   -  person Jstone05    schedule 23.11.2013
comment
@Jstone, не зная подробно, о чем вы говорите, я не могу сказать вам причину этого, но одно можно сказать наверняка. винформ отстой. Правила WPF. период. В WPF встроена виртуализация пользовательского интерфейса, благодаря чему он действительно хорошо справляется с большими наборами данных. winforms имеет встроенные мерцание и неспособности, а также отсутствие настраиваемости и бесполезность.   -  person Federico Berasategui    schedule 23.11.2013
comment
@ Jstone05 Вы видели пример моего средства просмотра журнала? у него есть таймер, который добавляет записи журнала в коллекцию каждые 100 мс, я только что проверил изменение этого значения на 1 мс, и пользовательский интерфейс по-прежнему работает так же. WPF на самом деле не волнует, как быстро вы обновляете свою коллекцию, потому что пользовательский интерфейс виртуализирован, поэтому он остается нетронутым до тех пор, пока вы не прокрутите или что-то в этом роде. Попробуйте мой пример с таймером 1 мс и убедитесь в результатах сами.   -  person Federico Berasategui    schedule 24.11.2013
comment
@ Jstone05, не говоря уже о том, что вы действительно можете создать богатый пользовательский интерфейс в WPF, в отличие от winforms, который поддерживает только poor материал.   -  person Federico Berasategui    schedule 24.11.2013
comment
@HighCore Спасибо за это, я передам это своему боссу и посмотрю, сможем ли мы перейти на WPF, я не специалист по WPF в нашей компании, поэтому я понятия не имею, сможем ли мы интегрироваться его в наш проект, но я определенно считаю, что это лучший выбор.   -  person Jstone05    schedule 25.11.2013


Ответы (1)


Есть простые шаги, как создать многократно используемую часть пользовательского интерфейса в Win Forms и поместить ее на несколько док-панелей:

  1. Создайте UserControl (меню VS Project->Add UserControl...), которое содержит все необходимые элементы пользовательского интерфейса через дизайнер.
  2. Перестройте решение -> UserControl появится на панели инструментов.
  3. Перетащите этот UserControl на определенную док-панель.
  4. Повторите шаг 3 для каждой док-панели. Выгода!!!

Во время выполнения просто создайте этот экземпляр UserControl и поместите его на док-панели, созданные во время выполнения.

person DmitryG    schedule 19.11.2013