Ах! Очень интересно. На самом деле я нашел похожее решение прошлой ночью. Это почти идентично, кроме того, что я использовал Canvas вместо Grid, потому что я не понял отрицательный трюк с Margin. Бесконечно благодарен!

у реализовать довольно сложный CurveEditor, который должен поддерживать обычные требования, такие как:

свободно масштабируемая и подвижная осьразличные типы интерполяции на точку кривой (линейная, кубическая, сплайн)Касательные (соединенные и разорванные)Выбор одной или нескольких точек для редактирования (перемещение, масштабирование, удаление) с помощью Fence или ClickПоказывать только маркеры и блики для выбранных точек кривой

Я не хочу манипулировать фактическими кривыми WPF, но существующей моделью с наборами ключ / значение / касательные и отобрать точную форму кривой из нашей реализации.

Я уже накопил некоторый опыт по реализации пользовательских UserControls и шаблонов. Но я хочу убедиться, что не пропускаю ни одного очевидного решения. Я планировал иметь это общее XAML-дерево:

CurveEditor - Окно, содержащее весь контентMainThumb : Включить перетаскивание и масштабирование диапазона редактораXAxis : UserControl разрисовывает какую-то шкалу на левой сторонеYAxis : UserControl разрисовывает некоторую шкалу внизуКривые : Холст с кривымикривая : UserControl для одной кривойCurveName - Метка кривойCurveLine - DrawingVisual, который будет визуализировать фактическую кривую путем выборки внутренней реализации функции сплайна.CurveEditPoints - холст, содержащий все точки редактированияCurveEditPoint - UserControl для одной точки редактированияLeftTangent - UserControl для левой касательной ручкиLeftTangentThumb - Для модификации ручкиRightTangent - UserControl для правой касательной ручкиRightTangentThumb - Для модификации ручкиCurvePointCenter - Визуализация актуальной точки, выбор состояния и типа интерполяции.CurvePointThumb - Большой палец, чтобы выбрать и перетащить точку вокруг

Я знаю, что это довольно сложный вопрос, и я не прошу фактической реализации. Меня интересуют следующие вопросы:

Можете ли вы порекомендовать какие-либо учебные пособия или книги, которые могут мне помочь (я уже получил Illustrated WPF, WPF Control Development Unleashed и несколько других)Должны ли второстепенные элементы, такие как Tangents, быть отдельными пользовательскими элементами управления?Какой контейнер лучше всего подходит для размещения отдельных «кривых», «точек редактирования» и «касательных». Прямо сейчас я использую Canvas и Canvas.SetLeft / SetTop для позиционирования дочерних элементов, но это кажется "странным".Должен ли я использовать «Shapes», такие как Path или DrawingVisual-Classes для реализации фактического представления. Путь прост, но я беспокоюсь о производительности с сотнями CurvePoints.Должен ли я использовать Transforms, чтобы вращать касательные или это просто хорошо, чтобы сделать некоторую триангуляцию математике в коде файлов?Приблизительно имеет смысл структура или вы предлагаете совершенно другой подход?

Ответы на вопрос(1)

Ваш ответ на вопрос