c# - How to link a slider value to the FontSize of a textblock and store that value in a ApplicationData variable -
i hope can me solve problem. have simple metro app. textblock named mytextblock placed in homepageview page. xaml:
<textblock x:name="mytextblock" text="hello" horizontalalignment="center" verticalalignment="top" style="{staticresource timestyle}" textalignment="center" fontsize="300" rendertransformorigin="0.5,0.5" margin="11,55,3,0" manipulationmode="all"> this loadstate in homepageview code behind:
protected override void loadstate(object navigationparameter, dictionary<string, object> pagestate) { try { double? mytextblockvalue = (double?)applicationdata.current.localsettings.values["mytextblocksize"]; if (mytextblockvalue != null) { mytextblock.fontsize = (double)mytextblockvalue; } } catch { } } i built settings pane (charm bar -> settings -> settings) named settingspage in slider named timeslider placed. xaml:
<slider x:name="timeslider" width="257" minimum="1" maximum="600" loaded="timeslider_loaded" valuechanged="timeslider_valuechanged" /> and these slider loaded , valuechanged methods placed in settingspage codebehind:
private void timeslider_loaded(object sender, routedeventargs e) { var slideristance = sender slider; double? storedsize = (double?)applicationdata.current.localsettings.values["mytextblocksize"]; if (storedsize != null && storedsize != 1) slideristance.value = (double)storedsize; else slideristance.value = 300; } private void timeslider_valuechanged(object sender, rangebasevaluechangedeventargs e) { var slideristance = sender slider; applicationdata.current.localsettings.values["mytextblocksize"] = slideristance.value double?; var _frame = window.current.content frame; _frame.navigate(_frame.content.gettype()); _frame.goback(); } you can download complete solution here on skydrive: https://skydrive.live.com/redir?resid=1b721133dc03e67c!7350
in way, linked fontsize property of mytextblock (in homepageview page) value property of slider (in settingspage page), user can change property @ runtime. also, property stored in mytextblocksize applicationdata variable preserve value when app closed , reopened.
the solution works problem is: when enter settings pane (charm bar -> settings -> settings) , change textblock fontsize property through slider, come homepageview , reopen settings pane, fontsize property reinitialized original value doesn't keep previous (user selected) value. can fix code please? thank in advance.
you have add 1 condition if (slideristance.value != 1) in timeslider_valuechanged event
private void timeslider_valuechanged(object sender, rangebasevaluechangedeventargs e) { var slideristance = sender slider; if (slideristance.value != 1) applicationdata.current.localsettings.values["mytextblocksize"] = slideristance.value double?; var _frame = window.current.content frame; _frame.navigate(_frame.content.gettype()); _frame.goback(); }
Comments
Post a Comment