如何将开关切换回滑块的上一个值

时间:2013-09-02 08:00:58

标签: c# windows-8

我在拨动开关和滑块上遇到问题。

滑块的值用于增加或减少媒体元素的音量。

但是,假设我将滑块的值设置为“50”,并将切换为“关闭”我的媒体元素。

当我将开关切换回“on”时,如何从滑块捕获上一个值?

目前,当sw_music.IsOn

时,我将滑块的值设置为'100'

XAML:

<Slider x:Name="slider" HorizontalAlignment="Left" VerticalAlignment="Top" Width="154" Margin="45,0,0,0" Height="42" Maximum="100" Value="100"/>
<ToggleSwitch x:Name="sw_music" Header="SOUND" IsOn="{Binding Value, ElementName=slider}"/>
<MediaElement x:Name="Intro_Sound" Source="SoundEffects/Intro.wav" Volume="{Binding Value, ElementName=slider}"/>

代码隐藏:

private void sw_music_Toggle(object sender, RoutedEventArgs e)
{
    if(slider.Value >= 1)
    {
        if (sw_music.IsOn)
        {
            slider.Value = 100;
            Intro_Sound.Play();
        }
        else
        {
            slider.Value = 0;
            Intro_Sound.Stop();
        }

        if(slider.Value > 1)
        {
            Intro_Sound.Play();
            sw_music.IsOn = true;
        }
    }
}

private void Slider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
    {
        Intro_Sound.Volume = (slider.Value) / 100;

        if (slider.Value == 0)
        {
            sw_music.IsOn = false;
        }
        else
        {
            sw_music.IsOn = true;
        }
    }

1 个答案:

答案 0 :(得分:1)

您可以在类中定义一个字段,并在更改sw_music_Toggle方法中的滑块值之前保留该值:

private int _lastSliderValue = 100;
private void sw_music_Toggle(object sender, RoutedEventArgs e)
{
    if(slider.Value >= 1) // I think you don't need this
    {
        if (sw_music.IsOn)
        {
            slider.Value = _lastSliderValue;
            Intro_Sound.Play();
        }
        else
        {
            _lastSliderValue = slider.Value;
            slider.Value = 0;
            Intro_Sound.Stop();
        }

        if(slider.Value > 1)
        {
            Intro_Sound.Play();
            sw_music.IsOn = true;
        }
    }
}