如何正确设置滑块值

时间:2014-10-29 16:15:31

标签: c# xaml windows-phone-8

在我的解决方案中,我想在页面导航到时设置滑块的值,并在用户离开页面时保存该设置。出于某种原因,我保存的滑块值总是被覆盖为起始值?滑块的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允许将滑块值保存在存储器中以备将来使用。我知道这可以正常工作,但我无法确保滑块始终设置为用户的首选项。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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
}