Мне необходимо при изменении значения элемента Slider выводить новое значение в Label, но я столкнулся с ошибкой:
Exception thrown: 'System.NullReferenceException' in URCPS.dll
Object reference not set to an instance of an object.
Будто я не инициализировал текстовую метку Label прежде чем использовать её. Вот код:
MainWindow.xaml:
<Window x:Class="URCPS.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:URCPS"
mc:Ignorable="d"
Title="MainWindow" Height="475" Width="500">
<Grid x:Name="grid" HorizontalAlignment="Center" Width="550" Height="434" VerticalAlignment="Bottom">
<GridSplitter Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="0, 0, 0, 60"/>
<Button x:Name="clickBtn" HorizontalAlignment="Center" VerticalAlignment="Center" Height="340" Width="400" Content="Start" Margin="0, 0, 0, 60" FontSize="35" FontFamily="Arial"/>
<Slider x:Name="timeSlider" Value="5" Minimum="1" Maximum="60" VerticalAlignment="Bottom" Margin="50, 0, 50, 35" TickPlacement="BottomRight" ValueChanged="SetValue" TickFrequency="2" IsSnapToTickEnabled="True"/>
<Label x:Name="sliderValueLbl" Content="5" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="8" FontSize="15"/>
</Grid>
</Window>
MainWindow.xaml.cs:
using System;
using System.Windows;
namespace URCPS
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void SetValue(object sender, RoutedPropertyChangedEventArgs<double> e)
{
sliderValueLbl.Content = e.NewValue;//здесь вылазит ошибка
}
}
}
sliderValueLbl.Content = e?.NewValue ?? 0;а вообще в WPF не используютLabel, в WPF для отображения текста используютTextBlock– aepot Feb 24 '23 at 11:59Label. Если бы я знал причину ошибки, очевидно бы не задавал вопрос. – dikiy_opezdal Feb 24 '23 at 13:48TextBlock. – dikiy_opezdal Feb 24 '23 at 13:49.Text = e?.NewValue.ToString() ?? "0";– aepot Feb 24 '23 at 13:50SetValueпочему-то вызываеться сам по себе, до того как появиться окно приложения, и соответственно в тот моментsliderValueLblещё не имеет значения. Исправление:if (sliderValueLbl!=null) sliderValueLbl.Text = e.NewValue.ToString();– dikiy_opezdal Feb 24 '23 at 14:15