#c# #wpf
#c# #wpf
Вопрос:
я новичок в сообществе StackOverflow и, пожалуйста, извините за мой плохой английский, я пытаюсь его улучшить.
Я использую вашу помощь для моей бакалаврской диссертации, и вы мне уже очень помогли, спасибо. Я пишу инструмент для визуализации данных в беспроводных сетях.
Я добавляю GeometryGroup в свой холст, чтобы соединить некоторые из моих пользовательских элементов управления с помощью строки. Строка обновляется при перемещении элемента управления и т. Д. Я использовал следующую статью: https://denisvuyka.wordpress.com/2007/10/21/wpf-diagramming-drawing-a-connection-line-between-two-elements-with-mouse / чтобы заставить его работать.
Это код, который я использую в своем XAML.
<Path Name="myPath" Stroke="#FF132FE0" StrokeThickness="1">
<Path.Data>
<GeometryGroup x:Name="connectors"/>
</Path.Data>
</Path>
То, что я пытаюсь сделать, это создать свой собственный класс canvas и добавить GeometryGroup в коде позади. То, что я пытался сделать, было:
System.Windows.Shapes.Path pathGroup= new System.Windows.Shapes.Path();
BrushConverter bc = new BrushConverter();
Brush Brush = (Brush)bc.ConvertFrom("#FF132FE0");
cmp.Stroke = Brush;
cmp.StrokeThickness = 1;
GeometryGroup connectors= new GeometryGroup();
pathGroup.Data=connectors;
Моя проблема в том, что это не сработало так, как предполагалось. С реализацией XAML я могу просто использовать следующее:
connectors.Children.Add(obj);
Я пытаюсь подвести итог своей проблеме. Я хотел бы создать с помощью c # -code GeometryGroup, чтобы иметь возможность добавлять и удалять строки, когда я этого захочу.
Спасибо =)
Комментарии:
1. Вы, вероятно, никогда не используете
pathGroup
нигде в своем Canvas.2. Как я могу получить доступ к дочерним элементам PathGroup? Нет такого атрибута, как дочерние элементы getChildren или Data . Дочерние элементы. Я даже не знаю, как получить доступ к строкам, которые я добавляю в GeometryGroup. Возможно, это моя проблема.
3.Вам не нужно «обращаться к дочерним элементам PathGroup». Как и раньше, вы должны получить доступ к дочернему свойству
connectors
. Однако вам придется добавитьpathGroup
в коллекцию дочерних элементов Canvas.4. Это была именно моя проблема. Спасибо за вашу помощь!
Ответ №1:
Возможно, вам захочется иметь производный холст с connectors
полем (аналогичным тому, который создан из XAML, показанного в вашем вопросе).
Холст будет рисовать соединители с помощью переопределенного OnRender
метода, как показано ниже.
public class CustomCanvas : Canvas
{
private readonly GeometryGroup connectors = new GeometryGroup();
protected override void OnRender(DrawingContext dc)
{
var stroke = new SolidColorBrush(Color.FromRgb(0x13, 0x2F, 0xE0));
dc.DrawGeometry(null, new Pen(stroke, 1), connectors);
base.OnRender(dc);
}
}
Некоторый дополнительный код в другом методе производного класса Canvas теперь будет добавлять или удалять объекты Geometry в / из Children
коллекции connectors
объекта.
Вы, конечно, также можете захотеть объявить свойства для Stroke соединителя, StrokeThickness и т. Д.
Комментарии:
1. Это то, что я постараюсь реализовать! Это гораздо более чистый способ реализовать эту функцию.