XAML Slider控件的问题

时间:2015-04-08 17:53:11

标签: xaml slider

我将滑块控件的值绑定到文本块。出于某种原因,它的工作原理不正常。例如,如果我慢慢地移动拇指,我会得到正确的增量,但是当我快速移动它时,它只显示一些随机的东西。

                                                                                                   

这是我在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

请指教。 谢谢大家。

1 个答案:

答案 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();
    }
}

希望这有帮助。