myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und XAML » Wie mit Ziehrahmen in eigenem FileBrowser feststellen, welche Items "markiert" sind?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Tzigo Tzigo ist männlich
myCSharp.de-Mitglied

avatar-377.gif


Dabei seit: 04.07.2019
Beiträge: 20
Entwicklungsumgebung: VS 2017, VS Code, Notepad++


Tzigo ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
        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; }
            }

XML-Code:
            <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
08.10.2019 14:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
ErfinderDesRades
myCSharp.de-Poweruser/ Experte

avatar-3151.jpg


Dabei seit: 31.01.2008
Beiträge: 5.287


ErfinderDesRades ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
12.11.2019 13:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 10 Monate.
Der letzte Beitrag ist älter als 9 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 12.08.2020 03:21