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
Post a Comment