none
Codebehind IMG im Canvas. Zweisung der Bilder(OSMkarten)

    Frage

  • Hallo,

    ich erzeuge ja IMG im Codebehind, und vergebe namen für die einzelnen Kacheln.

    double cx = (mcanvas.ActualWidth / 256);
                double cy = (mcanvas.ActualHeight / 256);
                double zt = 16;
    
                for (int x = 0; x < cx; ++x)
                    for (int y = 0; y < cy; ++y)
                    {
                        string a = Convert.ToString(x);
                        string b = Convert.ToString(y);
                        var img = new Image();
                        img.Source = null;
                        img.Name = "X" + a + "Y" + b;//Name mit den Koordinaten versehen
                        Canvas.SetLeft(img, x * 256);//Position anhand der Koordinaten setzen
                        Canvas.SetTop(img, y * 256);
    
                        mcanvas.Children.Add(img);//Zum 

    Die Namen Filter ich so:

       if (img is Image)
                        {//Nur Image-Controls finden
    
                            var name = (img as Image).Name;
                            //name ist nun der Name des Image-Control - enthält die Koordinaten des Bildes
                            //string t = "X{0}Y{1}";
                         
                                    if (name== "X0Y1")
                                    {
                                        

    Ist es möglich eine Logik aufzustellen wie ich alle anderen Kartentiels in Kacheln setzen kann

    ZBsp:

    If(Name= X0Y1 dann befülle alle andern mit)

      img.Source = new BitmapImage(new Uri(string.Format(CultureInfo.InvariantCulture, TileFormat, zt, xt+x, yt+x)));
    Grüße


    Dienstag, 12. August 2014 14:27

Alle Antworten

  • Zum Verständnis

    Das:

     var name = (img as Image).Name;
                            //name ist nun der Name des Image-Control - enthält die Koordinaten des Bildes
                            //string t = "X{0}Y{1}";
                         
                                    if (name== "X0Y1")
                                    {
                                        img.Source = new BitmapImage(new Uri(string.Format(CultureInfo.InvariantCulture, TileFormat, zt, xt, yt)));
                                   
                                    }
    
                                    if (name == "X1Y1")
                                    {
                                        img.Source = new BitmapImage(new Uri(string.Format(CultureInfo.InvariantCulture, TileFormat, zt, xt+1, yt)));
    
                                    }
    
                                    if (name == "X2Y1")
                                    {
                                        img.Source = new BitmapImage(new Uri(string.Format(CultureInfo.InvariantCulture, TileFormat, zt, xt + 2, yt)));
    
                                    }
                                

    vereinfacht, in einer for Schleife...

    Dienstag, 12. August 2014 14:53
  • Hallo,
    ja das geht. Du musst nur den Namen wieder in die Zahlen aufspalten. Zunächst musst du das X entfernen und anschließend am Y aufspalten:
    var parts = name.Substring(1).Split('Y');
    var x = int.Parse(parts[0]);
    var y = int.Parse(parts[0]);
    Nun kannst du die Bilder wie folgt zuweisen:
    img.Source = new BitmapImage(new Uri(string.Format(CultureInfo.InvariantCulture, TileFormat, zt, xt + x, yt + y - 1)));


    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

    • Als Antwort vorgeschlagen KoopakillerMVP Freitag, 26. September 2014 20:56
    Dienstag, 12. August 2014 15:23
  • Ok, ja das klappt.

    Wie könnte ich es jetzt mit Button verknüpfen, also wenn ich auf ButtonClick y=-1 beim nächsten Click y=-2.

    Sprich die Button Betätigung zählen

    Besten Dank

    Dienstag, 12. August 2014 22:20
  • Hallo,
    simuliere in den Click-Eventhandlern einfach das DragDelta-Event des Thumbs:
    void buttonLeft_Click(object sender, RoutedEventArgs e){
      var x = 256;//um so viel wird nach links verschoben
      foreach(var ctrl in canvas.Children){
        var img = ctrl as Image;
        if(img != null)
        {
          Canvas.SetLeft(img, Canvas.GetLeft(img)+x);
          //y-Wert ist egal, da wir nur nach Links verschieben
        }
      }
    }


    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

    Mittwoch, 13. August 2014 15:30