#c# #.net #wpf #graphics
#c# #.net #wpf #графика
Вопрос:
У меня есть 2 разные GeometryGroup
коллекции, которые я хочу объединить, но не смог найти ничего в сети для этого. Есть идеи, как это сделать?
Ответ №1:
Вам нужно будет добавить Children
из одной коллекции в другую или создать третью, новую GeometryGroup
, которая выполняет объединение обоих дочерних элементов. Например:
GeometryGroup newGroup = new GeometryGroup();
foreach(var child in group1.Children.Union(group2.Children))
newGroup.Children.Add(child);
Комментарии:
1. Спасибо, Рид, это единственный способ? Потому что в моем цикле я просто изменяю содержимое этих обеих коллекций, чтобы изменить их позиции и т.д. Если я объединю их в каждом экземпляре, то мне придется создавать новую GeometryGroup для каждого кадра моего приложения (30 кадров в секунду) с общим количеством фигур 200. Я полагаю, это было бы большими накладными расходами, верно? Может быть, мне следует использовать 2 элемента управления canvas?
2. Спасибо, Рид, в таком случае, есть ли способ указать композицию? Я не уверен, как объединить результаты нескольких элементов управления canvas.
3. @Joan: Вы можете просто поместить их оба в сетку, в одну строку / столбец, и они будут идеально «перекрываться». По умолчанию это прозрачные фоны, так что это должно просто сработать. Единственной проблемой будет z-упорядочение — вам придется выполнять z-упорядочивание на холсте по уровню холста, поэтому, если у вас есть пути перекрытия, содержимое одного холста всегда будет «поверх» другого.
4. @Joan: Да — по умолчанию сетка состоит из ячеек 1×1. Просто поместите оба элемента управления canvas внутри сетки, и это то, что вы получите 😉
5. @Joan: Нет — по умолчанию они будут помещены в строку 0 и столбец 0. Вам нужно только установить прикрепленные реквизиты (Grid.Row / Column), если вы хотите, чтобы они были где-то в другом месте (хотя я часто все еще устанавливаю их явными)