windows phone 8-在将滑块值设置为文本属性期间出现C#System.NullReferenceExcept

本文关键字:属性 文本 NullReferenceExcept C#System 设置 phone windows | 更新日期: 2023-09-27 17:57:52

我有一个简单的滑块项目。我想在文本框中显示滑块值。

<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:对象引用未设置为对象的实例。在slider_test.MainPage.slider_ValueChanged(对象发送方,RoutedPropertyChangedEventArgs`1e)在

有人能解释一下问题出在哪里吗?非常感谢。

windows phone 8-在将滑块值设置为文本属性期间出现C#System.NullReferenceExcept

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

        <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中显示的内容。但这是最不可能的尝试。。。

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

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

通过这种方式,使用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}"
/>