Was ist der beste Weg, um die Funktionalität einer Windows Explorer -Ordner -Benutzeroberfläche in WPF zu replizieren?

StackOverflow https://stackoverflow.com/questions/2246823

Frage

Also benutze ich FileSystemWatcher um eine Wiedergabeliste zu bevölkern und zu aktualisieren. Ich möchte viele Funktionen von Windows Explorer replizieren, vor allem:
* Inline umbenennen
* Langsame Doppelklicken zum Umbenennen

Ich habe ein ziemlicher Aufwand, also dachte ich, vielleicht gibt es einen einfacheren Weg, als das Rad neu zu implementieren? Vielleicht kann ich irgendwie ein Windows Explorer -Fenster in meiner Anwendung als Steuerung hosten?

War es hilfreich?

Lösung

Das Hosting eines echten Windows-Explorer-Fensters in Ihrer Anwendung ist möglich, aber mit Gefahren behaftet: Die Techniken sind in XP vs Vista vs Win7 unterschiedlich und Sie werden es mit allen möglichen Sachen auf niedriger Ebene zu tun haben. Ich würde dringend empfehlen, es zu versuchen.

Ich denke, Ihre besten Optionen sind:

  1. Verwenden Sie Microsoft.Win32.openFiledialog, wenn es leicht an Ihre Bedürfnisse angepasst werden kann, oder
  2. Codieren Sie Ihre eigene Funktionalität oder wenn Sie sehr mutig sind:
  3. Starten Sie ein separates Explorer -Fenster, optional mit Code, der versucht, seine Position und Größe über Ihre Anwendung zu erzwingen (dies ist auch schwierig ...)

Anmerkungen zur Umbenennungsfunktion des Inline -Umbenennens

Die Inline-Umbenannung und das langsame Doppelklick, um Funktionen umzubenennen, sind wirklich trivial zu implementieren.

In Ihrem Ansichtsmodell fügen Sie hinzu:

  • Ein "Newname" String DependentyProperty
  • Ein "umbenannter" Bool Dependentcomproperty mit einem PropertyChangedCallback. Wenn "Umbenennen" wahr wird, kopieren Sie den Namen nach NewName. Wenn es falsch geht, wenn NewName! = Name in die Datei umbenennen, benennen Sie einen Aktualisierungsnamen.

Fügen Sie in Ihrer DataTemplate einen Auslöser für "Umbenennen" hinzu, das Ihren Textblock ersetzt, der an "Name" durch ein an "NewName" gebundener Textfeld gebunden ist.

Fügen Sie diese Ereignishandler hinzu: * Schlüsseldown -Ereignis: Wenn F2 gedrückt wird, umzubenennen. Wenn die Eingabetaste gedrückt und umbenannt wird, setzen Sie um Umbenennen = false. Wenn ESC gedrückt wird und den Kopiennamen in NewName umbenannt und umbenannt wird = Falsch. * LostFocus Ereignis: Set Renaming = False * SelectionChanged Ereignis auf Container: Aufzeichnungszeitstempel der letzten Auswahländerung. * MouseDown -Ereignis: Wenn der linksgerichtete Klick und die Auswahl vor teurer> 0,5 Sekunden geändert werden, setzen Sie die Umbenennung = true

Viele andere Funktionen der Explorer -Ansicht sind ähnlich einfach zu implementieren, z. B. Gruppierung und mehrere Spalten.

Hoffe das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top