c# - Loading a button, loses functionality -


edit.: here projekt http://www.fast-files.com/getfile.aspx?file=71686

the project i'm working on wants easy manage protocol creator. can create dynamic text fields. 1 row description of the content other row content itself. 2 row has button works traffic light because of number of reasons. i'm @ point "alpha" of thing finished can save , load problem functionality of button gets lost is, assume because, doesn't saves reference event handler.

namespace ampelthingy {     public class load            {      public void loading() {     streamreader sr = new streamreader(@"aa.xaml");     string text = sr.readtoend();     sr.close();      stringreader stringreader = new stringreader(text);     xmlreader xmlreader = xmlreader.create(stringreader);      stackpanel wp = (stackpanel)system.windows.markup.xamlreader.load(xmlreader);      ((mainwindow)system.windows.application.current.mainwindow).sp2.children.clear(); // clear existing children      foreach (frameworkelement child in wp.children) // , each child in wrappanel loaded (wp)     {         ((mainwindow)system.windows.application.current.mainwindow).sp2.children.add(cloneframeworkelement(child)); // clone child , add our existing wrap panel     }            }  frameworkelement cloneframeworkelement(frameworkelement originalelement) {     string elementstring = xamlwriter.save(originalelement);      stringreader stringreader = new stringreader(elementstring);     xmlreader xmlreader = xmlreader.create(stringreader);     frameworkelement clonedelement = (frameworkelement)xamlreader.load(xmlreader);      return clonedelement; }     } }  namespace ampelthingy {     public class save     {       public void saving() {        stringbuilder outstr = new stringbuilder();      xmlwritersettings settings = new xmlwritersettings();     settings.indent = true;     settings.omitxmldeclaration = true;     settings.newlineonattributes = true;       xamldesignerserializationmanager dsm = new xamldesignerserializationmanager(xmlwriter.create(outstr, settings));     dsm.xamlwritermode = xamlwritermode.expression;     xamlwriter.save(((mainwindow)system.windows.application.current.mainwindow).sp2, dsm);     string savedcontrols = outstr.tostring();      file.writealltext(@"aa.xaml", savedcontrols);      }     } }   namespace ampelthingy {     /// <summary>     /// interaktionslogik für mainwindow.xaml     /// </summary>     public partial class mainwindow : window     {         public mainwindow()         {             initializecomponent();             this.background = brushes.magenta;             stackpanel1.width = double.nan;             stackpanel1.height = double.nan;             stackpanel2.width = double.nan; ;             stackpanel2.height = double.nan;             addwrappanelmaster();          }          button addbuttonslave(button but)         {               but.click += new routedeventhandler(this.buttclickslave);             return (but);         }          button addbuttonslaveadd(button but)         {               but.click += new routedeventhandler(this.buttclickslaveadd);             return (but);         }          button addbuttonmaster(button but)         {               but.click += new routedeventhandler(this.buttclickmaster);             return (but);         }          void buttclickslaveadd(object sender, eventargs e)         {             textbox txtb1 = new textbox();             txtb1.background = system.windows.media.brushes.magenta;             txtb1.text = "text";             txtb1.width = 75;             txtb1.height = 75;             button s = (button)sender;             wrappanel wp = (wrappanel)s.parent;             wp.children.remove(s);             wp.children.add(txtb1);             button b = new button();             b = addbuttonmaster(b);             b.content = "add";             b.width = 75;             wp.children.add(b);              // add buttons parent wrappanel using children.add method.           }          void buttclickmaster(object sender, eventargs e)         {            textbox txtb1 = new textbox();             txtb1.background = system.windows.media.brushes.magenta;             txtb1.text = "text";             txtb1.width = 75;             txtb1.height = 75;             button s = (button)sender;             wrappanel wp = (wrappanel)s.parent;             wp.children.remove(s);             wp.children.add(txtb1);             button b = new button();             b = addbuttonmaster(b);             b.content = "add";             b.width = 75;             wp.children.add(b);              // add buttons parent wrappanel using children.add method.           }          public stackpanel sp2         {             { return stackpanel2; }         }          void buttclickslave(object sender, eventargs e)         {              button s = (button)sender;              if (s.background != brushes.blue && s.background != brushes.red && s.background != brushes.green)                 s.background = brushes.red;             else                 if (s.background == brushes.green)                     s.background = brushes.red;             else             if (s.background == brushes.blue)                 s.background = brushes.green;             else             if (s.background == brushes.red)                 s.background = brushes.blue;          }          void addtextbox(button sender) {             textbox txtb1 = new textbox();             txtb1.text = "text";             txtb1.width = 75;             txtb1.height = 75;             wrappanel s = (wrappanel)sender.parent;             s.children.add(txtb1);              // add buttons parent wrappanel using children.add method.           }          void addwrappanelslave() {              wrappanel mywrappanel = new wrappanel();             mywrappanel.background = system.windows.media.brushes.azure;             mywrappanel.orientation = orientation.horizontal;             mywrappanel.width = 4000;             mywrappanel.horizontalalignment = horizontalalignment.left;             mywrappanel.verticalalignment = verticalalignment.top;               // define 3 button elements. last 3 buttons sized @ width              // of 75, forth button wraps next line.             button btn1 = new button();             btn1 = addbuttonslave(btn1);             btn1.content = "button 1";             btn1.width = 75;             button btn2 = new button();             btn2 = addbuttonslaveadd(btn2);             btn2.content = "button 2";             btn2.width = 75;              // add buttons parent wrappanel using children.add method.             mywrappanel.children.add(btn1);             mywrappanel.children.add(btn2);             this.stackpanel1.children.add(mywrappanel);         }          void addwrappanelmaster()         {              wrappanel mywrappanel = new wrappanel();              solidcolorbrush mysolidcolorbrush = new solidcolorbrush();             mysolidcolorbrush.color = color.fromargb(255, 0, 0, 255);              mywrappanel.background = system.windows.media.brushes.magenta;             mywrappanel.orientation = orientation.horizontal;             mywrappanel.width = 4000;             mywrappanel.horizontalalignment = horizontalalignment.left;             mywrappanel.verticalalignment = verticalalignment.top;               // define 3 button elements. last 3 buttons sized @ width              // of 75, forth button wraps next line.             textbox txtb1 = new textbox();             txtb1.background = system.windows.media.brushes.magenta;             txtb1.text = "text";             txtb1.width = 75;             txtb1.height = 75;             button btn1 = new button();             btn1 = addbuttonmaster(btn1);             btn1.content = "add";             btn1.width = 75;              // add buttons parent wrappanel using children.add method.             mywrappanel.children.add(txtb1);             mywrappanel.children.add(btn1);             this.stackpanel2.children.add(mywrappanel);         }          private void button1_click(object sender, routedeventargs e)         {             addwrappanelslave();             this.show();         }          private void button2_click(object sender, routedeventargs e)         {             load load = new load();             load.loading();         }          private void button3_click(object sender, routedeventargs e)         {             save save = new save();             save.saving();         }       } } 

since button, might suggest use commands instead of directly handling click event? otherwise have bind events after parsing - stated in this answer.


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -