WPF InkCanvas Z-Index для ударов
В WPF InkCanvas чернила отображаются сверху, а обводки не имеют свойства z-index. У меня есть другие элементы UIE, такие как фигура, изображения на InkCanvas, и я не могу вывести элементы UIE наверх. Есть ли способ обойти эту проблему? я пытался
ниже вещей.
1) использовать два разных InkCanvas (один для штрихов и один для элементов UIE) - в этом нельзя добиться эффекта сэндвича (т. Е. UIElement между штрихами) Примером этого круга является UIElement2) Маскировка штрихов с использованием геометрического пути и добавление в качестве UIElement - если Я добавляю штрихи как UIElements (используя путь), тогда я потеряю функциональность стирания.
2 ответа
Редактор карт, который является частью нашего набора игр, использует чернила для рисования ландшафта, поэтому у меня есть недавний опыт такого рода вещей.
Мое приложение работает так, что вы выбираете объект, который вы рисуете (лес, дорога, контур и т. Д.) И рисуете обводку чернилами.
Затем я обрабатываю этот штрих и получаю геометрию. Я передаю это в viewmodel > itemssource > itemscontrol. Это тогда шаблонируется в части местности. Этот пункт управления ниже чернильницы. Пользователь может манипулировать z-индексом тех, перемещая их вверх и вниз в наблюдаемой коллекции. Я полагаюсь только на порядок определения z-index.
Я также сохраняю данные от каждого удара, сериализуя это.
Вы думаете "как насчет стирания?" Для этого у меня был бы явный режим стирания этой вещи. Пусть они выберут форму и получат ее данные об обводке, добавят обводку обратно в чернильный холст. Как только они закончат стирание, используйте кнопку "сохранить изменения" или что-то еще, чтобы повторно обработать штрих (ы) и переключиться обратно в режим редактирования.
Поскольку это редактор игровых карт, над которым я работаю, при рисовании создаются типы областей и линий местности, но их площадь / линия определяется геометрией, переведенной из обводки. ZIndex соответствует порядку объектов на левой панели. Кнопки, которые вы можете видеть с шевронами, направленными вверх и вниз, перемещают порядок
Z-индекс штрихов просто определяется их порядком в StrokeCollection
,
Первый элемент визуализируется первым, и порядок продолжается, если вы хотите поместить обводку сверху, вы можете использовать Move
метод:
MyStrokeCollection.Move(MyStrokeCollection.IndexOf(someStroke), 0);