none
Canvas bewegen RRS feed

  • Frage

  • Ich versuche gerade ein Programm für Windows Phone in C# zuschreiben wo sich ein Canvas jede Milisekunde um ein Pixel bewegen soll. Wenn ich auf den Start Button drücke muss ich erstmal so 4 sec. warten und dann ist das canvas an der Endstelle zwischendurch passiert gar nichts. Ich versuche das der Pfeil sich flüssig bewegt doch er hat ihrgendwie nur zwei stellen wo er stehen bleibt.

    Hier ist mein Code

    private void Button_Click(object sender, RoutedEventArgs e)
            {
                int left = 50;
                int top = 150;
                while (left <= 300)
                {
                    canvas.Margin = new System.Windows.Thickness(left, top, 0, 0);
                    System.Threading.Thread.Sleep(100);
                    left = left + 100;
                }
            
            
            }
    Ich hoffe ihr könnt mir helfen

    Montag, 12. August 2013 13:10

Antworten

  • Hallo, das Problem an deinem Code ist, das die GUI nicht aktualisiert wird, solange der Code ausgeführt wird. Grundsätzlich gibts da 2 Lösungsmöglichkeiten für deinen Fall:

    1. Einen 2. Thread nutzen.
      Speziell hierfpür würde ich dir den DispatcherTimer ans Herz legen, da du hier problemlos auch auf die GUI zugreifen kannst.
              {//ButtonClick
      dt.Tick += dt_Tick; dt.Interval = new TimeSpan(0, 0, 0, 0, 1);//1 ms dt.Start();//Timer starten } void dt_Tick(object sender, EventArgs e) { //Hier das Canvas bewege } DispatcherTimer dt = new DispatcherTimer();
    2. Eine Animation auf das Canvas anwenden.
      Die Animation kannst du im XAML oder im Codebehind erstellen. Wenn du Blend hast, hast du auch einen ziehmlich guten Editor für diese Animationen. Hier etwas Lesestoff dazu:
      http://msdn.microsoft.com/de-de/magazine/cc721608.aspx
      Für WindowsPhone gehts genauso wie in Silverlight.

    Speziell für eine Bewegung (Animation) würde ich natürlich eine Animation bevorzugen. Aber vielleicht hast du auch noch mehr vor.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Montag, 12. August 2013 14:01