У меня есть представление дерева в моем представлении WPF, и у меня также есть холст, я запускаю событие двойного щелчка и передаю ItemContainerGenerator
в качестве параметра моей команде, как показано ниже.
<dc:Interaction.Triggers>
<dc:EventTrigger EventName="MouseDoubleClick">
<dc:InvokeCommandAction Command="{Binding TreeItemDoubleClickCommand}"
CommandParameter="{Binding ElementName=treeView, Path=ItemContainerGenerator}"/>
</dc:EventTrigger>
</dc:Interaction.Triggers>
</dc:TreeView>
затем я получаю позицию элемента древовидной структуры, как показано ниже
private void PerformDoubleClick(ItemContainerGenerator itmGenerator)
{
var selectedItem = _dirItems.SelectMany(d => d.GetAllChildren()).FirstOrDefault(c => c.IsSelected);
TreeViewItem tvii = ContainerFromItemRecursive(itmGenerator, selectedItem);
if (tvii == null) return;
TreeViewItem tvi = tvii;
GeneralTransform myTransform = tvi.TransformToAncestor(tvii);
Point myOffset = myTransform.Transform(new Point(0, 0));
//canvas.Children.Clear();
var line = new Line();
line.Stroke = Brushes.LightSteelBlue;
line.X1 = myOffset.X + tvii.ActualWidth;
line.X2 = 700;
line.Y1 = myOffset.Y + tvii.ActualHeight / 2;
line.Y2 = 300;
line.StrokeThickness = 2;
//canvas.Children.Add(line);
var fromPoint = tvii.PointFromScreen(new Point());
MappingLines.Add(new MappingLine { From = new Point(fromPoint2.X * -1.00 - 50, (fromPoint2.Y * -1.00 - 55)), To = new Point(X2, Y2), LineColor = GetRandomColor() });
}
позже MappingLines
добавлен в качестве источника на холст и рисую линии, как показано ниже.
<ItemsControl DataContext="{Binding MappingDocumentViewModel.RightPanel }" ItemsSource="{Binding MappingLines}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Line X1="{Binding From.X}" Y1="{Binding From.Y}"
X2="{Binding To.X}" Y2="{Binding To.Y}"
Stroke="{Binding LineColor}" StrokeThickness="1"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
мой вопрос здесь Как я могу перерисовать линии, когда древовидный элемент расширяется или сворачивается? в настоящее время линии будут там в той же координации, когда я разверну и сверну элемент древовидной структуры,
есть предложения по этой проблеме?