我将滑块控件的值绑定到文本块。出于某种原因,它的工作原理不正常。例如,如果我慢慢地移动拇指,我会得到正确的增量,但是当我快速移动它时,它只显示一些随机的东西。
这是我在C#中改变的价值事件:
private void sliderShiftStart_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
if (sliderShiftStart.Value > counter)
{
time = time.AddMinutes(30);
tbTimeDispPopup.Text = string.Format("{0:t}", time);
}
else
{
time = time.AddMinutes(-30);
tbTimeDispPopup.Text = string.Format("{0:t}", time);
}
counter = Convert.ToInt32(sliderShiftStart.Value);
}
counter
是双重型变量,
time
是一个DateTime变量,
和tbTimeDispPopup
是一个文本块。
当我不进行时间计算时,跟踪工作正常。我正在尝试腾出时间,因为滑块值意味着滑块最小值将是12:00 AM,滑块最大值将是第二天的12:00 AM。
这是我项目的链接,如果有人可以查看它。 Project Link
请指教。 谢谢大家。
答案 0 :(得分:0)
我查看了你的项目,如果我正确理解,你想绑定文本框文本绑定到滑块值。为此,我建议您:将文本框文本绑定到滑块值,根据需要设置最小值,并使用转换器正确显示DateTime,如下所示。
<Grid Background="DarkSlateGray">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock x:Name="TbTimeDispPopup"
Grid.Row="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
FontSize="30"
Text="{Binding ElementName=SliderShiftStart, Path=Value, Converter={StaticResource ValueToHoursConverter}}"
TextWrapping="Wrap" />
<Slider x:Name="SliderShiftStart"
Grid.Row="1"
MinHeight="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
IsSnapToTickEnabled="True"
Maximum="48"
TickFrequency="1"/>
</Grid>
这是转换器:
public class ValueToHoursConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
object result = DependencyProperty.UnsetValue;
if (value is double)
{
result = DateTime.Now.Date.AddHours((double)value/2d);
}
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
希望这有帮助。