OpenFileDialog in C# mit WPF

  • Allgemein

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    OpenFileDialog in C# mit WPF

    Hi,

    Ich beschäftige mich gerade mit WPF in C#. Leider bin ich noch nicht ganz firm in C# und hab mir ein paar Videos und Tutorials über WPF angeschaut.

    Jetzt stolpere ich darüber, dass ich eine Datei öffnen muss ;)

    wie muss dieser Codeausschnitt richtig heißen und was muss ich für using-Dinger machen ;) ?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. using System.Windows.Input;
    2. using meinProjekt.ViewModels;
    3. using System;
    4. //...
    5. Microsoft.Win32.OpenFileDialog OFD = new Microsoft.Win32.OpenFileDialog();
    6. OFD.CheckFileExists = true; OFD.Filter = "Bilddateien|*.jpg; *.jpeg; *.jpe; *.bmp; *.ico; *.png; *.gif; *.pic; *.JPG; *.JPEG; *.JPE; *.BMP; *.ICO; *.PNG; *.GIF; *.PIC"
    7. OFD.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); OFD.Multiselect = false; OFD.Title = "AbiBall - Bild 1 für " + this.viewModel.Schüler.Name;
    8. if (OFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    9. {
    10. this.viewModel.Schüler.ImagePath1 = OFD.FileName;
    11. viewModel.SaveChanges();
    12. }


    Weil iwie kann ich nicht auf System.Windows.Forms zugreifen?! Und da häng ich grad... bitte Hilfe ;)

    PS: Des ganze befindet sich in der Execute-Methode in nem ICommand, falls des iwer wissen muss

    VB.NET-Quellcode

    1. OpenFileDialog ofd = new OpenFileDialog();
    2. if (ofd.ShowDialog() == DialogResult.GetValueOrDefault(true))
    3. {
    4. string fileName = ofd.FileName;
    5. }


    GetValueOrDefault verlangt ein INullable<T> d.H. true, false oder null. DefaultValue ist false.

    Mfg
    Nenene:
    Zum einen kein Forms in WPF!
    Lösch den Verweis zu System.Windows.Forms wieder raus -> brauchste nicht.
    Zum zweiten:

    Quellcode

    1. var ofn = new Microsoft.Win32.OpenFileDialog();
    2. ofn.Filter = "...";
    3. //...
    4. if(ofn.ShowDialog() == true)
    5. {
    6. //...
    7. }


    @Monte leider macht dein Code kein bisschen Sinn. Zum einen bekommst du kein DialogResult zurück sondern ein true?. Und ein Nullable Typ hat die Methode GetValueOrDefault(das ist richtig), jedoch muss das dann wenn schon so aussehen: if(ofn.ShowDialog().GetValueOrDefault())


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    DialogResult gehört auch in WPF nicht zu System.Windows.Forms sondern zu System.Windows und die Assembly von System.Windows ist das PresentationFramework, dass zu WPF gehört.

    msdn.microsoft.com/en-us/libra….window.dialogresult.aspx

    Das Wichtigste:

    VB.NET-Quellcode

    1. [TypeConverterAttribute(typeof(DialogResultConverter))]
    2. public Nullable<bool> DialogResult { get; set; }


    MfG

    Edit:
    // Hat sich erledigt.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Monte“ ()

    Monte schrieb:

    Aber ich dachte GetValueOrDefault gibt ein bool zurück?
    Jein. Die Methode gehört der Struktur Nullable<T>. Somit gibt GetValueOrDefault immer T zurück. Im Fall eines bool? ist dies ein bool ja.
    Habe nie etwas anderes gesagt. Nur deine If-Abfrage ist irgendwie komisch -> siehe meine korrigierte Version.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    @Monte: DialogResult ist eine Eigenschaft des Dialogs, kein zusätzlicher Typ (Enum) wie in Windows Forms. Wie du schon geschrieben hast, ist es Nullable<bool>, weshalb man einfach - wie @thefiloe: geschrieben hat - auf true prüfen kann (der implizite Cast regelt das)... und gut is. Wahrscheinlich gab es zu viel Confusion wegen OK, Yes bzw. None, No, Cancel und Abort bei einem Dialog, der nur 2 Knöpfe hat und man eigentlich nur wissen will, ob man weiter machen soll. :P

    thefiloe schrieb:

    Zum einen kein Forms in WPF!
    Für ein TrayIcon würde ich in der WPF lieber das aus Windows Forms verwenden, als eine weitere Library, die auch noch erst gecached/jitted werden muss. Das verlängert die Startzeit von WPF-Anwendungen nur noch mehr. Aber das ist Geschmackssache. :P
    Von meinem iPhone gesendet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nikeee13“ ()

    @nikeee13 Da hast du recht. Bei solchen Sachen wie z.b. wenn gewissen Funktionalitäten total fehlen kann man zur Ausnahme auf Winforms zurückgreifen. Jedoch ist die Faustregel dies besser nicht zu tun sicher eine gute Grundeinstellung. Ich persönlich verstehe so oder so nicht wieso die in .net 4.5 ribbons,... machen aber kein TrayIcon aber naja.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.