将滑块值设置为text属性时的C#System.NullReferenceException

时间:2014-04-10 09:16:11

标签: c# windows-phone-8

我有这个简单的滑块项目。我想在TextBox中显示滑块值。

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
     <TextBox x:Name="sliderValue" HorizontalAlignment="Stretch" VerticalAlignment="Top" />
     <Slider x:Name="slider" Minimum="0" Maximum="20" Value="5" ValueChanged="slider_ValueChanged"/></Grid>

        // Constructor
    public MainPage()
    {
        InitializeComponent();
    }

    private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
            var slider = sender as Slider;
            string value = string.Format("{0}", slider.Value);
            sliderValue.Text = value;
    }

在最后一行我收到此错误:

  

System.NullReferenceException:未将对象引用设置为对象的实例。      at slider_test.MainPage.slider_ValueChanged(Object sender,RoutedPropertyChangedEventArgs`1 e)      在.......

有人能解释一下我的问题是什么吗?谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用XAML将滑块值绑定到TextBlock文本。

        <Slider x:Name="SliderValueText" ValueChanged="SliderValueText_ValueChanged"
                VerticalAlignment="Top"
                Width="440"
                Minimum="0"
                Maximum="20"
                Value="5" />
        <TextBlock Height="30"
                   Text="{Binding Value,  ElementName=SliderValueText}"
                   VerticalAlignment="Top"
                   HorizontalAlignment="Center" />


private void SliderValueText_ValueChanged(object sender, System.Windows.RoutedPropertyChangedEventArgs<double> e)
{
    string value = string.Format("{0}", e.NewValue);
    MessageBox.Show(value);
}

这是一个选择。在这里你需要滑块值。所以我存储在变量“value”中。这就是我在MessageBox中显示的内容。但尝试......最不明智。

答案 1 :(得分:2)

我不确定,但可能会对你有帮助。

private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        { 
          Dispatcher.BeginInvoke(() =>
                {
                    string value = string.Format("{0}",  e.NewValue);
                    sliderValue.Text = value;
                }); 

        }

答案 2 :(得分:0)

以这种方式使用e.NewValue进行轮询更改值:

private void slider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
    {
        Debug.WriteLine("Value changed and value is " + e.NewValue.ToString());  
    }

但对于标签,只需使用XAML绑定:

<TextBlock x:Name="someLabel"  
           Text="{Binding ElementName=slider, Path=Value}"
/>