Cursor ändern von Image oder Bitmap

  • WPF

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von r0tzi.

    Hallo

    Ich hatte nun ein wenig "Luft" um mir das anzusehen. Ich weis ich wollte so wenig wie möglich um code und dem Projekt sagen aber eines kann ich mir nicht verkneifen. Sorry.
    Ich weis nicht wieviel du unter WPF machen willst, aber tu dir selbst einen gefallen und versuche es mal mit Binding. Nicht falsch verstehen. Es ist jetzt kein NoGo ohne binding zu arbeiten, die WPF macht so nur nicht wirklich Spass und du wirst schnell die Lust daran verlieren. Ich weis es, mir ist es auch passiert. Du hast durch dein Konstrukt soooo viel Code Doppelt, dreifach und vierfach das du die Anwendung in zwei Jahren bestimmt nicht warten möchtest.

    Gut, nun zum code.
    Im Grunde wolltest du ein InteropBitmap bzw. ein BitmapImage zu einem BitmapSource machen. da alle drei Klassen meines Wissens nach von der selben Basisklasse erben funktioniert das auch und durch interne Konverter der WPF zeigt diese ein InteropBitmap auch für das ImageControl an. Allerdings wird dieses intern dann gewrappt. Dies führt dazu das dein Cast am ende leider Fehlschlägt.
    Ich habe mich nun nicht lange damit gespielt dies umzuwandeln da ich kein Fan davon bin dies immer wieder zu tun. Ich gehe gerne her und speichere solch umwandlungen (z.b. Fileicon in ein Bild) in einen Ordner um dieses File dann immer wieder verwenden zu können. wie ein Cache.

    Für das Beispiel habe ich einfach eine Temporäre Datei erstellen lassen.

    Hier die Methode GetFileIcon und deren Submethoden:

    VB.NET-Quellcode

    1. Public Function GetFileIcon(Filepath As String) As String
    2. If System.IO.File.Exists(Filepath) Then
    3. Using sysicon As System.Drawing.Icon = System.Drawing.Icon.ExtractAssociatedIcon(Filepath)
    4. Return BitmapSourceToFile(ConvertToBitmapSource(sysicon))
    5. End Using
    6. End If
    7. If System.IO.Directory.Exists(Filepath) Then
    8. Return "pack://application:,,,/my Bar;component/resources/Folder.png"
    9. End If
    10. Return Nothing
    11. End Function
    12. Public Function ConvertToBitmapSource(icon As System.Drawing.Icon) As BitmapSource
    13. Dim width As Integer = icon.Width
    14. Dim height As Integer = icon.Height
    15. Dim a As Object = Imaging.CreateBitmapSourceFromHBitmap(icon.ToBitmap.GetHbitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(width, height))
    16. Return CType(a, BitmapSource)
    17. End Function
    18. Public Function BitmapSourceToFile(bmpSource As BitmapSource) As String
    19. Dim bitmapSource As BitmapSource = bmpSource
    20. Dim encoder As New PngBitmapEncoder
    21. Dim tempFilePath As String = Path.GetTempFileName
    22. Using fStream As New FileStream(tempFilePath, FileMode.Create)
    23. encoder.Frames.Add(BitmapFrame.Create(bitmapSource))
    24. encoder.Save(fStream)
    25. fStream.Close()
    26. End Using
    27. Return tempFilePath
    28. End Function


    Der Aufruf erfolgt dann an sehr vielen stellen deiner App: Imagebox.Source = New BitmapImage(New Uri(GetFileIcon(OBD.SelectedPath)))

    Der Fehler im Designer rührte einfach daher das du deinen Stammnamespace von myBar in my_bar unbenannt hattest. Nur leider hast du im XAML den Namespace nicht umgestellt. Nix grawierendes.
    Betraf aber auch nur den About-Dialog.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

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

    THATS MA BOY !!! :D

    ja man drücks mir, no problem.. aber es hat alles gefunkt bisher :DDD

    okay.. dadurch sind weiter probleme entstanden hahahaha... in deiner dll, führet man dragndrop mit der linken maustaste.. ich brauchs aber für die rechte.. .weil sobald ich nun was dragdrope, fügt er mir das program wieder hinzu. aber funktioniert einwandfrei du alter teufelskerl :D mega.


    kannste mir die dll noch auf rechte maustaste umstellen? -> danke.

    Das mit dem Namespace habe ich nicht verstanden. Meinst du weil bei Class MyBar und nicht My_Bar steht? wie kann ich das lösen? Wenn ich in der Class das ändere, habe ich >290 fehler :D
    in der XAML schlägt er mir immer my_bar vor...

    hast du auch eine ahnung wieso er deinen dll nicht in den Libraries findet?

    Grüsse und nochmal danke ;)

    r0tzi schrieb:

    ich brauchs aber für die rechte.. .weil sobald ich nun was dragdrope, fügt er mir das program wieder hinzu.

    Finde ich nich Benutzerfreundlich aber ok. Ich finde man sollte das mit einem Schalter machen. Schalte ich in den "Designmodus" kann ich herumschieben, ansonsten bewirt der linksklick was anderes. Aber ist deine App.
    Ich häng dir das ganze Projekt an. Habe es auf Rechtsklick umgestellt, kannste aber jetzt selbst auch bearbeiten die Solution.

    r0tzi schrieb:

    Das mit dem Namespace habe ich nicht verstanden. Meinst du weil bei Class MyBar und nicht My_Bar steht?

    Nicht die Class. Den Import im XAML des AboutDialogs.

    r0tzi schrieb:

    hast du auch eine ahnung wieso er deinen dll nicht in den Libraries findet?

    Definiere bitte "Libraries".

    Grüße
    Sascha
    Dateien
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##