none
Custom Progressbar RRS feed

  • Frage

  • Hallo,

    Ich hoffe nun, dass dies meine letzte Frage für die nächste zeit ist.

    In vielen Spielen, welche meist in C++ geschrieben sind sind man meist atemberaubende Progressbars.Meine Frage ist hierbei ob solche Progressbars ebenfalls in C# WPF möglich sind? Ich habe hierzu ein Beispiel aus Google gesucht.

    Image

    Da zB diese Progressbar nicht nur länglich ist, sondern auch Ecken und Abrundungen hat, stelle ich es mir persönlich noch schwieriger vor so etwas in C# WPF um zu setzen.

    Ich habe einmal gesehen, dass ein Developer die Progressbar einmal ohne jeglichen Fortschritt und einmal mit dem kompletten Fortschritt benutzt, indem er die eine ohne Fortschritt anzeigt, und von der mit Fortschritt immer einen gewissen Anteil anzeigt, bis sie komplett angezeigt wird.

    EDIT: Der Background meiner Progressbar wäre natürlich dann Transparent.

    Mit freundlichen Grüßen

    Markus Ö.



    • Bearbeitet Bashesz Dienstag, 10. Juni 2014 17:27
    Dienstag, 10. Juni 2014 17:22

Antworten

Alle Antworten

  • Hallo,
    da du mit WPF arbeitest, ist es um so leichter das Design vollkommen frei anzupassen. Dazu musst du nur das Template des Controls (der ProgressBar) ändern. Unter ProgressBar-Formate und -Vorlagen findest du ein Beispiel in der MSDN.

    Alles was in dem Template ist, kannst du frei anpassen. Durch die verschiedenen Eigenschaften von Border usw. kannst du auch Runden etc. erstellen. Am besten lernt man beim Designen durch probieren. Im Code werden dir auch sämtliche Eigenschaften vorgeschlagen, sodass man leicht neues entdecken kann.

    Hier noch 2 Links zum Einstieg des Designens in WPF:
    Übersicht über WPF-Pinsel
    Übersicht über die Geometrie

    Leider sieht man dein Bild nicht, weswegen ich nicht näher auf das Beispiel eingehen kann.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Dienstag, 10. Juni 2014 18:17
    Moderator
  • Hallo,

    Ich habe das Bild eben noch auf Tinypic hochgeladen. nun sollte man es sehen können. Deine Links werde ich mir gleich mal durchlesen.

    Image

    Für weitere Tipps bin ich natürlich immer offen.

    Mit freundlichen Grüßen

    Markus Ö

    Dienstag, 10. Juni 2014 18:22
  • Hallo, 

    Ich habe mich etwas herumgespielt bezüglich der Progressbar und habe auch einiges schon erreicht, jedoch kommt mir eine Frage. Wenn ich eine Klasse im Code neu initialisiere und in dieser Werte abspeichere, und anschließend ein neues Fenster öffne, wie kann ich dann die Klasse an das neue Fenster übergeben? Da mit durch Klassenname name = new Klassenname() eine neue Instanz erstellt wird und meine Werte nicht weiters gespeichert sind.  Kann man irgendwie beim Öffnen des 2. Fensters einen Parameter mit geben wodurch das 2. Fenster bescheid weiß, dass die Klasse bereits initialisiert wurde und auch direkt benutzen kann?

    Mit freundlichen Grüßen

    Markus Ö.

    Dienstag, 10. Juni 2014 21:42
  • Hallo,
    das Übertragen von Daten wäre eigentlich schon wieder eine neue Frage, nach Forenkonvention/regeln also ein neuer Thread um die Übersicht zu waren. (Es macht nichts wenn du viele Fragen und somit viele Threads hast.)

    Machen wir mal kurz eine Ausnahme um das wichtigste zu klären: Ja du kannst die Daten übertragen. Im 2. Fenster kannst du dafür beispielsweise eine Eigenschaft erstellen, die du dann im 1. Fenster zuweist. Alternativ kannst du den Wert auch direkt dem Konstruktor übergeben

    public classs Window2:Window{
      public Window2(){//Parameterloser Konstruktor
        InitialisizeComponent();
      }
      public Window2(MyClass myInstance)
        this();//Parameterlosen Konstruktor aufrufen
      {
        //Du kannst den Parameterlosen Konstruktor auch entfernen und nur den hier behalten, 
        //rufe dann hier InitialisizeComponent auf.
        this.MyInstance = myInstance;
      }
      public MyClass MyInstance{get;set;}
    }
    
    public class Window1:Window{
      private void DoSome(){
        Window2 wnd=new Window2();
        wnd.MyClass=myInstance;//Hier die Instanz übergeben
        wnd.Show();
      }
    }

    Wenn du den Wert direkt im Konstruktor verlangst, zeigt es, dass man etwas (die Klasseninstanz) am Anfang übergeben sollte. Eine Eigenschaft kann jederzeit zugewiesen werden.

    Um vom Window2 etwas an Window1 zu transportieren, solltest du in Window2 ein Event erstellen, welches in den EventArgs die Infos transportiert. Window1 kann dieses Event abonnieren. Mehr Infos und ein Beispiel zu Events findest du hier.
    Weitere Fragen dann bitte trotzdem in einen neuen Thread.

    PS: Um deine Progressbar genauso zu gestalten wie auf dem Bild wirst du vermutlich Bilder einfügen müssen. Vektorgrafiken sind da besser geeignet, weil diese nicht verpixxeln wenn du die Größe veränderst. Allerdings wirst du auch ohne Bilder recht viel schaffen können.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Dienstag, 10. Juni 2014 22:12
    Moderator