В вашем XAML есть TextBlock
DistTextBlock , определенный после DistSlider .Когда XAML загружается в первый раз, он запускает обработчик ValueChanged
и DistTextBlock будет нулевым.Вы можете защититься от этого несколькими способами:
// 1. Naive, but least changes to your code
if (DistTextBlock != null)
{
DistTextBlock.Text = DistSlider.Value.ToString();
}
Существует превосходное предложение @ SvenG , которое перемещает логику в XAML (нет необходимости в обработчике ValueChanged
):
<TextBlock Text="{Binding Value, ElementName=DistSlider}" ... />
Наконец, вы можете использовать ViewModel
(или любой контекст данных, поддерживающий INotifyPropertyChanged
) для обработки передачи значения и от него.
Важной частью использования привязки является то, что она позволяет поместить любое форматирование строки вместе с его использованием в XAML (скажем, если этот ползунок был для суммы в валюте):
<TextBlock Text="{Binding Value, ElementName=DistSlider, StringFormat={}{0:C}}"
Последний бонус от использования привязки выходит в .Net Framework 4.5, которая позволяет вам указать задержку перед обновлением привязки ее источника .Это позволит вашему графическому интерфейсу выглядеть более реактивным, если привязка используется в дорогостоящих операциях.
<Slider Value="{Binding DollarAmount, Delay=50}" ... />
<TextBlock Text="{Binding DollarAmount, StringFormat={}{0:C}}" ... />