首页 > 解决方案 > 如何根据树视图项目折叠或展开在画布中重绘线条?

问题描述

我的 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>

我的问题是如何在树视图项目展开或折叠时重绘线条?目前,当我展开和折叠树视图项目时,这些线条将处于相同的协调状态,

对这个问题有什么建议吗?

标签: wpfcanvasdata-bindingtreeviewwpf-controls

解决方案


推荐阅读