2014-10-29 33 views
0

在我的解决方案中,我想在页面导航时设置滑块的值,并在用户离开页面时保存该设置。出于某种原因,我保存的滑块值总是被覆盖为起始值?滑块的ValueChanged事件在OnNavigatedTo之前运行,并使用用户请求的滑块值重置我保存的变量。如何正确设置滑块值

MainPage.xaml中

<Slider x:Name="Slider" Minimum="1" Maximum="256" ValueChanged="Slider_ValueChanged"/> 

MainPage.xaml.cs中

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     Slider.Value = (double)Settings.Slider.Value; 
    } 

private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
    { 
     Slider slider = sender as Slider; 

     if (slider != null) 
     { 
      //slider.Value = Math.Round(slider.Value); //Round the value so it is a whole number even when the slider is dragged 
      slider.Value = Settings.Slider.Value; 
      Settings.Slider.Value = (int)slider.Value; 
     } 
    } 

要注意,Settings.Slider.Value使滑块值被保存在存储以备将来使用。我知道这是正确的,但我无法确保滑块始终设置为用户的偏好。

回答

0

我想设置在页面导航到一个滑块的值,并保存 用户离开页面时的设置。

为什么不只是使用OnNavigatedTo/OnNavigatedFrom组合并将Slider_ValueChanged单独留下?

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    // reload the slider value 
    slider.Value = Settings.Slider.Value; 

    base.OnNavigatedTo(e); 
} 

protected override void OnNavigatedFrom(NavigationEventArgs e) 
{ 
    // save the slider value before exiting 
    Settings.Slider.Value = (int)slider.Value; 

    base.OnNavigatedFrom(e); 
} 

private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
{ 
    // leave this alone unless the slider actually does something like changing the Opacity of an Image object 
} 
0

里面Slider_ValueChanged,每当值​​改变时,您将slider.value在设置旧值,并与slider.Value更新Settings.Sliver(刚刚在覆盖前行)

slider.Value = Settings.Slider.Value; 
Settings.Slider.Value = (int)slider.Value; 

而且,而不是阅读并设置值onNavigated,更喜欢将它们设置为Loaded事件。

Slider.Value = (double)Settings.Slider.Value;