c# - Frame navigation issue while using Drawer Layout in windows phone 8.1 -
i developing windows phone app 8.1 using third party drawerlayout. problem when have design page using draweralayout. need pass same layout each other pages in application. when use bold frame.navigate(typeof(page1)); application crashed. unable debug problem. please help!!!
my xaml code is
<grid x:name="rootlayout"> <grid.rowdefinitions> <rowdefinition height="auto"/> <rowdefinition height="*"/> </grid.rowdefinitions> <grid.columndefinitions> <columndefinition width="auto"/> <columndefinition width="*"/> </grid.columndefinitions> <!-- title bar--> <grid x:name="titlebar" height="50" grid.row="0" grid.column="0" grid.columnspan="2" background="skyblue"> <image source="/assets/fs-logo.png" height="50" horizontalalignment="left" margin="10,0,0,0"/> </grid> <!--drawer layout--> <drawer:drawerlayout x:name="drawerlayout" grid.row="1" grid.column="0" grid.columnspan="2"> <!--main layout--> <grid x:name="mainlayout" background="white" > <scrollviewer> <grid margin="5"> <grid.rowdefinitions> <rowdefinition height="*"/> <rowdefinition height="*"/> </grid.rowdefinitions> <image x:name="mainimage" grid.row="0" source="{binding }"></image> <gridview x:name="grdview" grid.row="1" itemssource="{binding }" itemcontainerstyle="{staticresource gridviewitemcontainer}" tapped="grdview_tapped" > <gridview.itemtemplate> <datatemplate> <border borderthickness="1" borderbrush="blue"> <grid height="{binding size}" width="{binding size}"> <image height="120" width="150" source="{binding simageurl}" stretch="fill"> </image> <textblock text="{binding name}" horizontalalignment="center" verticalalignment="bottom" foreground="black" fontsize="18"/> </grid> </border> </datatemplate> </gridview.itemtemplate> <gridview.itemspanel> <itemspaneltemplate> <itemswrapgrid orientation="horizontal"></itemswrapgrid> </itemspaneltemplate> </gridview.itemspanel> </gridview> </grid> </scrollviewer> </grid> <!--drawer layout--> <grid x:name="listfragment" flowdirection="lefttoright" > <listview x:name="listitem" selectionchanged="listitem_selectionchanged"> <listview.itemtemplate> <datatemplate> <textblock text="{binding}" fontsize="20" foreground="black" margin="10" verticalalignment="center" horizontalalignment="left"/> </datatemplate> </listview.itemtemplate> </listview> </grid> </drawer:drawerlayout> <image grid.row="1" grid.column="0" height="50" width="50" source="/assets/appbar.right.png" tapped="chevlon_tapped"> </image> </grid> my mainpage.cs
public sealed partial class mainpage : page { private navigationhelper navigationhelper; private observabledictionary defaultviewmodel = new observabledictionary(); list<services.company> companydata; list<services.category> categorydata; public mainpage() { this.initializecomponent(); loaded += mainpage_loaded; this.navigationhelper = new navigationhelper(this); this.navigationhelper.loadstate += this.navigationhelper_loadstate; this.navigationhelper.savestate += this.navigationhelper_savestate; this.navigationcachemode = navigationcachemode.required; } async void mainpage_loaded(object sender, routedeventargs e) { await windows.ui.viewmanagement.statusbar.getforcurrentview().hideasync(); // setgridviewitemsize(); //throw new notimplementedexception(); } /// <summary> /// gets <see cref="navigationhelper"/> associated <see cref="page"/>. /// </summary> public navigationhelper navigationhelper { { return this.navigationhelper; } } /// <summary> /// gets view model <see cref="page"/>. /// can changed typed view model. /// </summary> public observabledictionary defaultviewmodel { { return this.defaultviewmodel; } } private async void navigationhelper_loadstate(object sender, loadstateeventargs e) { if (e.pagestate != null) { // this.defaultviewmodel["mainpage"] = (mainpage)e.pagestate["mainpage"]; // restore scroll offset var index = (int)e.pagestate["firstvisibleitemindex"]; var container = grdview.containerfromindex(index); grdview.scrollintoview(container); } else { //load data first time drawerlayout.initializedrawerlayout(); var company = await services.compcatinfo.getcompaniesasync(app.compid); companydata = company.tolist(); if (companydata.count > 0) { mainimage.source = new bitmapimage(new uri(companydata.elementat(0).logoimgurl, urikind.absolute)); } var category = await services.compcatinfo.getcategoriesasync(app.compid); categorydata = category.tolist(); setgridviewitemsize(); if (categorydata.count > 0) { grdview.itemssource = categorydata; } } } private void navigationhelper_savestate(object sender, savestateeventargs e) { var isp = (itemswrapgrid)grdview.itemspanelroot; int firstvisibleitem = isp.firstvisibleindex; e.pagestate["firstvisibleitemindex"] = firstvisibleitem; // e.pagestate["homepage"] = this.frame.currentsourcepagetype; // must serializable according suspensionmanager //e.pagestate["mainpage"] = this.defaultviewmodel["mainpage"]; } private void setgridviewitemsize() { //var viewmodel = (datacontext viewmodel1); var width = math.truncate((grdview.actualwidth - 10)); var height = math.truncate((grdview.actualheight - 10)); // total left + right margin each tile (itemcontainerstyle) var margin = 10; var twocolumngridportrait = (width / 2) - margin; // var threecolumngridportrait = (width / 3) - margin; var twocolumngridlandscape = (height / 2) - margin; var threecolumngridlandscape = (height / 3) - margin; double portrait; double landscape; portrait = twocolumngridportrait; landscape = threecolumngridlandscape; application.current.resources["gridviewitemportrait"] = math.round(portrait, 2); application.current.resources["gridviewitemlandscape"] = math.round(landscape, 2); if (displayinformation.getforcurrentview().currentorientation == displayorientations.portrait) { measure((double)application.current.resources["gridviewitemportrait"]); } else { measure((double)application.current.resources["gridviewitemlandscape"]); } // throw new notimplementedexception(); } private void measure(double size) { (int = 0; < categorydata.count; i++) { var item = categorydata[i]; item.size = size; } //throw new notimplementedexception(); } #region navigationhelper registration /// <summary> /// invoked when page displayed in frame. /// </summary> /// <param name="e">event data describes how page reached. /// parameter typically used configure page.</param> protected override void onnavigatedto(navigationeventargs e) { this.navigationhelper.onnavigatedto(e); //if (e.navigationmode == navigationmode.new) //{ // drawerlayout.initializedrawerlayout(); // var company = await services.compcatinfo.getcompaniesasync(app.compid); // companydata = company.tolist(); // if (companydata.count > 0) // { // mainimage.source = new bitmapimage(new uri(companydata.elementat(0).logoimgurl, urikind.absolute)); // } // var category = await services.compcatinfo.getcategoriesasync(app.compid); // categorydata = category.tolist(); // setgridviewitemsize(); // grdview.itemssource = categorydata; //} //else //{ // // this.frame.content = e.content; //} // todo: prepare page display here. // todo: if application contains multiple pages, ensure // handling hardware button registering // windows.phone.ui.input.hardwarebuttons.backpressed event. // if using navigationhelper provided templates, // event handled you. } protected override void onnavigatedfrom(navigationeventargs e) { this.navigationhelper.onnavigatedfrom(e); } #endregion private void chevlon_tapped(object sender, tappedroutedeventargs e) { string[] list = new string[] { "services","solutions","technologies","about us"}; listitem.itemssource = list.tolist(); if(drawerlayout.isdraweropen) { drawerlayout.closedrawer(); } else { drawerlayout.opendrawer(); } } private void listitem_selectionchanged(object sender, selectionchangedeventargs e) { if (listitem.selecteditem != null) { var selecteditem = listitem.selectedvalue string; // detailstxtblck.text = "selecteditem is: " + selecteditem; drawerlayout.closedrawer(); listitem.selecteditem = null; } } private void grdview_tapped(object sender, tappedroutedeventargs e) { drawerlayout.closedrawer(); if(e.originalsource.gettype().tostring()=="windows.ui.xaml.controls.image"||e.originalsource.gettype().tostring()=="windows.ui.xaml.controls.textblock") { var catobj = (sender gridview).selecteditem services.category; ////frame rootframe = window.current.content frame; ////rootframe.navigate(typeof(page2),catobj); frame.navigate(typeof(page2),catobj); } } }
can navigate way
coredispatcher dispatcher = corewindow.getforcurrentthread().dispatcher; await dispatcher.runasync(coredispatcherpriority.normal, () => { (window.current.content frame).navigate(typeof(page name)); });
Comments
Post a Comment