C# 如何正确设置滑块值

C# 如何正确设置滑块值,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,在我的解决方案中,我希望在导航页面时设置滑块的值,并在用户离开页面时保存该设置。出于某种原因,我保存的滑块值总是被覆盖为起始值?滑块的ValueChanged事件在OnNavigatedTo之前运行,并使用用户请求的滑块值重置保存的变量 MainPage.xaml <Slider x:Name="Slider" Minimum="1" Maximum="256" ValueChanged="Slider_ValueChanged"/> MainPage.xaml.cs prot

在我的解决方案中,我希望在导航页面时设置滑块的值,并在用户离开页面时保存该设置。出于某种原因,我保存的滑块值总是被覆盖为起始值?滑块的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;
        }
    }
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
Slider.Value=(双精度)Settings.Slider.Value;
}
私有无效滑块\u值已更改(对象发送方,RoutedPropertyChangedEventArgs e)
{
滑块=发送器作为滑块;
如果(滑块!=null)
{
//slider.Value=Math.Round(slider.Value);//对值进行四舍五入,使其成为一个整数,即使在拖动滑块时也是如此
slider.Value=Settings.slider.Value;
Settings.Slider.Value=(int)Slider.Value;
}
}

请注意,
Settings.Slider.Value
允许将滑块值保存在存储器中以备将来使用。我知道这是正确的,但我在确保滑块始终设置为用户的首选项时遇到了问题。

在slider\u ValueChanged内部,每当值更改时,您将设置中的slider.value设置为旧值,并使用slider.value更新设置。slider.value(您在前一行中刚刚覆盖)

此外,与其在Navigated上读取和设置值,不如在Loaded事件上设置它们

   Slider.Value = (double)Settings.Slider.Value;
我想在导航到页面时设置滑块的值,然后保存 用户离开页面时的设置

为什么不直接使用
OnNavigatedTo
/
OnNavigatedFrom
组合并将
滑块的值保持不变

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
}
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
//重新加载滑块值
slider.Value=Settings.slider.Value;
基地。导航到(e);
}
受保护的覆盖无效OnNavigatedFrom(NavigationEventArgs e)
{
//退出前保存滑块值
Settings.Slider.Value=(int)Slider.Value;
基于(e)的导航;
}
私有无效滑块\u值已更改(对象发送方,RoutedPropertyChangedEventArgs e)
{
//除非滑块实际执行类似于更改图像对象不透明度的操作,否则不要使用此选项
}
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
}