2010-10-20 8 views
1

Мне нужно создать специальный интерактивный рисунок «холст».(WPF) UserControl или CustomControl?

В этом холсте пользователь сможет разместить графические элементы - точки, связанные с линиями.

У меня есть готовый WinForms UserControl - pointsList, который представляет список точек, представленных на холсте. PointsList может добавлять и удалять точки, связывать их с линией.

pointsList должен быть плавающим (подвижным) и изменяемым по размеру элементом управления на холсте (например, окна на экране).

Мои вопросы:

  1. Что является лучшим выбором для этого "холст" - это WPF UserControl или CustomControl?
  2. Возможно ли разместить (плавающий) WinForm UserControl внутри элемента управления WPF?
  3. Будет ли трудно переписать плавающий и изменяемый размер пользовательского элемента управления WPF внутри другого?

EDIT

Лучшее объяснение "Плавучий контроль":

Представьте WPF контейнер (скажем, холст). В этом холсте у вас есть кнопка. Когда вы нажимаете кнопку, «Управление плавающим окном» открывается внутри Холст.

Этот элемент управления как форма Windows, может быть открыт, перемещен, закрыт, изменен, но все это внутри родительского холста. Нечто похожее на родительские и дочерние формы MDI, но родительский элемент не является формой, а контейнером WPF (например, Canvas).

ответ

4

1) Оба типа подойдут вашим потребностям. UserControls, как правило, легче создавать, особенно когда вы новичок в WPF. CustomControl фактически не является классом, но это означает, что вы расширяете существующий элемент управления. Есть несколько отличий между двумя подходами, самый большой из них заключается в том, что настраиваемый элемент управления легче сделать его тематическим. В вашем случае, я полагаю, это не является необходимостью, поэтому я бы рекомендовал UserControl. Дополнительная информация об этом: http://www.wpftutorial.net/CustomVsUserControl.html

2) Да. Вы можете поместить элемент управления WinForms в WPF с помощью элемента управления WindowsFormsHost. Одно из ограничений заключается в том, что элемент управления WinForms должен быть непрозрачным прямоугольником, то есть вы не можете бросать разные формы и ожидать, что они будут правильно накладываться. Ищите WindowsFormsHost, и вы найдете множество примеров.

3) Вы можете лучше объяснить? не понимаю, что вы имеете в виду, но, конечно, вы можете размещать UserControls друг в друге, а WPF особенно полезен при работе с динамическим размером.

+0

спасибо. 1) Будет использовать UserControl для холста, 2) мне не нужна прозрачность, но взаимодействие (перетаскивание, например,); 3) см. Мое редактирование для третьей точки. – serhio

+0

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

+0

3) Что касается пользовательского интерфейса MDI, это определенно можно сделать. Посмотрите в Google на примерах, но будьте уверены, что WPF позволит это с меньшими или большими усилиями в зависимости от вашего сценария. –

1

Мы получили много пробега, адаптируя этот код WPF из CodeProject. link text

+0

если да, то какова будет ваша рекомендация? – serhio

+0

DesignerCanvas - это вывод Canvas. Это работает хорошо. Вещи, которые идут на холсте, обычно являются UserControls (они вставляются в DesignerItems (ContentControls), которые живут на холсте. – jeff

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