【问题标题】:How to Set Slider Value Correctly如何正确设置滑块值
【发布时间】:2014-10-30 08:37:33
【问题描述】:

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

【问题讨论】:

    标签: c# xaml windows-phone-8


    【解决方案1】:

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

    为什么不直接使用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
    }
    

    【讨论】:

      【解决方案2】:

      在 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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-13
        • 2013-01-05
        • 1970-01-01
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多