2013-04-06 47 views
0

我希望你能帮助我解决我的问题。我有一个简单的地铁应用程序。名为myTextBlock的文本块位于HomePageView页面中。这是它的XAML:如何将滑块值链接到文本块的FontSize并将该值存储在ApplicationData变量中

<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"> 

这是在主页的代码在LoadState背后:

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 
      { 

      } 
     } 

我建了一个设置面板(魅力吧 - >设置 - >设置)命名SettingsPage其中滑块名为timeSlider被放置。这是它的XAML:

<Slider x:Name="timeSlider" Width="257" Minimum="1" Maximum="600" Loaded="timeSlider_Loaded" ValueChanged="timeSlider_ValueChanged" /> 

而这些滑块加载和的ValueChanged方法放在SettingsPage代码隐藏:

private void timeSlider_Loaded(object sender, RoutedEventArgs e) 
     { 
      var sliderIstance = sender as 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 as Slider; 
      ApplicationData.Current.LocalSettings.Values["myTextBlockSize"] = sliderIstance.Value as double?; 
      var _Frame = Window.Current.Content as Frame; 
      _Frame.Navigate(_Frame.Content.GetType()); 
      _Frame.GoBack(); 
     } 

您可以在这里下载完整的解决方案在我的SkyDrive:https://skydrive.live.com/redir?resid=1B721133DC03E67C!7350

通过这种方式,我将myTextBlock的fontsize属性(在HomePageView页面中)链接到滑块的值属性(在SettingsPage页面中),以便用户可以在运行时更改此属性。此外,此属性存储在myTextBlockSize ApplicationData变量中,以在应用程序关闭并重新打开时保留其值。

该解决方案的工作原理是:当我进入设置窗格(魅力酒吧 - >设置 - >设置),并通过滑块更改textblock fontsize属性,然后我回到主页视图并重新打开设置窗格,fontsize属性会重新初始化为其原始值,因此它不会保留先前(用户选择的)值。 你能解决我的代码吗?非常感谢你提前。

回答

0

你必须在timeSlider_ValueChanged事件

private void timeSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e) 
{ 
    var sliderIstance = sender as Slider; 
    if (sliderIstance.Value != 1) 
     ApplicationData.Current.LocalSettings.Values["myTextBlockSize"] = sliderIstance.Value as double?; 
    var _Frame = Window.Current.Content as Frame; 
    _Frame.Navigate(_Frame.Content.GetType()); 
    _Frame.GoBack(); 
} 
+0

谢谢你加一个条件if (sliderIstance.Value != 1)。你有解决方案。非常简单! :) – user1941332 2013-04-09 20:36:40

相关问题