Bagaimana cara menggambar ulang garis di kanvas berdasarkan item tampilan pohon yang diciutkan atau diperluas?

Saya memiliki tampilan pohon di tampilan WPF saya dan saya juga memiliki kanvas, saya memicu acara klik dua kali dan meneruskan ItemContainerGenerator sebagai parameter ke perintah saya seperti di bawah ini.

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

maka saya mendapatkan posisi item treeview seperti di bawah ini

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() });

}

kemudian MappingLines ditambahkan sebagai sumber ke kanvas dan menggambar garis seperti di bawah ini.

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

pertanyaan saya di sini adalah bagaimana cara menggambar ulang garis ketika item tampilan pohon diperluas atau diciutkan? saat ini garis-garisnya akan berada di sana dalam koordinasi yang sama ketika saya memperluas dan menciutkan item tampilan pohon,

ada saran untuk masalah ini?


person Shanjee    schedule 06.01.2020    source sumber
comment
Anda ingin mengikat visibilitas Line ke properti IsExpanded item tampilan pohon. mungkin jika Anda membuatnya sesederhana itu, Anda memiliki peluang lebih besar untuk menemukan jawabannya   -  person Bizhan    schedule 06.01.2020
comment
Catatan lain, karena Anda hanya memiliki satu Baris, mengapa tidak menggunakan panel lain selain Canvas? panel lain dibatasi ukurannya, tidak seperti kanvas.   -  person Bizhan    schedule 06.01.2020
comment
@Bizhan ini bukan satu baris, akan ada beberapa garis dengan warna berbeda, setelah pengguna menutup item tampilan pohon, garis tersebut juga harus diperbarui, dalam kasus saya garis akan tetap pada posisi yang sama ketika tampilan pohon runtuh, karena garis posisi awal diambil dari koordinasi X,Y item tampilan pohon.   -  person Shanjee    schedule 08.01.2020
comment
maaf saya salah memahami masalah Anda. Anda mungkin memerlukan mekanisme penyegaran. lihat postingan ini: stackoverflow.com/questions/11986840/wpf-treeview-refreshing   -  person Bizhan    schedule 08.01.2020
comment
Ngomong-ngomong, menurutku ini bukan pendekatan terbaik. Anda mengikat garis X,Y ke koordinasi absolutnya. Anda mungkin ingin mempertimbangkan kembali untuk melakukan hal itu. Saya sarankan mencari tutorial untuk ini   -  person Bizhan    schedule 08.01.2020