我有这个简单的滑块项目。我想在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) 在.......
有人能解释一下我的问题是什么吗?谢谢。
答案 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}"
/>