wpf - 如何根据树视图项目折叠或展开在画布中重绘线条?
问题描述
我的 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>
我的问题是如何在树视图项目展开或折叠时重绘线条?目前,当我展开和折叠树视图项目时,这些线条将处于相同的协调状态,
对这个问题有什么建议吗?
解决方案
推荐阅读
- python - 正确显示绘图
- javascript - Javascript:我可以使用 JS 将 HTML 元素从一个页面复制到另一个页面吗?
- network-programming - 127.0.0.1 与 127.0.0.3 的异步套接字
- windows - 这个 powershell 命令的 bat 版本是什么,什么命令将用作 sccm 中的安装行?
- apache-kafka - 如果您没有在 Fluent Bit Kafka 输出插件中设置 message_key(即保留为 NULL)会怎样?
- image - 将 SVG 元素(从 html 而非文件)渲染到 Canvas
- c++ - 一种方法来保证一堆派生类具有执行相同操作并保证以相同方式命名的静态函数?
- java - 完整的scrollView屏幕截图不完全可见android
- javascript - discord.js - 如何选择随机提及的用户?
- android - 无法安装使用离子电容器生成的 apk