Laden...

Wie mit Ziehrahmen in eigenem FileBrowser feststellen, welche Items "markiert" sind?

Erstellt von Tzigo vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.270 Views
T
Tzigo Themenstarter:in
20 Beiträge seit 2019
vor 4 Jahren
Wie mit Ziehrahmen in eigenem FileBrowser feststellen, welche Items "markiert" sind?

Hallo C# Community,

ich habe eine Frage bezüglich Mehrfachauswahl in einem TreeView.

Da in WPF anscheinend kein eigener FolderbrowserDialog existiert und ich den aus WinForms nicht implementieren möchte, habe ich mir einen eigenen geschrieben.
Das funktioniert bislang tadellos. Die Laufwerke und Folder werden korrekt eingelesen, mit entsprechendem Icon versehen und dem TreeView hinzugefügt.

Auch MultiSelect per Shift und Up/Down sowie per Ctrl funktioniert.
Was mir jetzt noch fehlt ist eine Auswahl per Ziehrahmen, sowie im WindowsExplorer halt.

Den AuswahlRahmen erstellen per:


        private void TreeGrid_MouseMove(object sender, MouseEventArgs e)
        {
            if (MousePressed == true)
            {
                TreeGrid.CaptureMouse();
                double x = e.GetPosition(SelectCanvas).X;
                double y = e.GetPosition(SelectCanvas).Y;
                SelectionRec.SetValue(Canvas.LeftProperty, Math.Min(x, RecAnchorPoint.X));
                SelectionRec.SetValue(Canvas.TopProperty, Math.Min(y, RecAnchorPoint.Y));

                SelectionRec.Width = Math.Abs(x - RecAnchorPoint.X);
                SelectionRec.Height = Math.Abs(y - RecAnchorPoint.Y);

                if (SelectionRec.Visibility != Visibility.Visible) { SelectionRec.Visibility = Visibility.Visible; }
            }


            <Grid Name="TreeGrid" MouseLeftButtonDown="TreeGrid_MouseLeftButtonDown"    MouseLeftButtonUp="TreeGrid_MouseLeftButtonUp" MouseMove="TreeGrid_MouseMove">
                 <TreeView Name="MultiTreeView" SelectedItemChanged="MultiTreeView_SelectedItemChanged"/>
                <Canvas Name="SelectCanvas">
                    <Rectangle Name="SelectionRec" Stroke="DodgerBlue" StrokeThickness="0.8" Fill="LightBlue" Opacity="0.5" Visibility="Collapsed"/>
                </Canvas>
            </Grid>

Nun stehe ich auf dem Schlauch. Wie komme ich an die TreeViewItems unterhalb des AuswahlRahmens?
Ich fand da einiges über HitTest, aber ich werde da nicht wirklich schlau draus.
Die Lösung ist sicher ganz simple, aber ich seh anscheinend den Wald vor lauter Bäumen nicht.

Vielleicht hat jemand einen Ansatz für mich.

Liebe Grüße
Tzigo

5.299 Beiträge seit 2008
vor 4 Jahren

HiTest weiss ich jetzt auch nicht, wie für das Problem anwenden.
Mit RectAngle.Intersect() kann man ermitteln, ob 2 Rechtecke sich überschneiden.
Also musst du deine TreeItems durchlaufen um festzustellen, wessen DarstellungsRechteck sich mit deinem Auswahlrechteck überschneidet.

Der frühe Apfel fängt den Wurm.