滑块不止一次完全改变刻度

Slider completely change ticks more than once

我有一个滑块绑定到具有一组值的 DoubleCollection Ticks(通过 Ticks="{Binding Ticks}")。 Ticks 集合最终被清除并填充了完全不同的值。问题是,在重新填充之后,即使集合中的值已经不同,滑块仍然按旧刻度移动。

如何解决这个问题?

报价集合似乎不依赖于最小值和最大值。

滑块值取决于最小值和最大值,刻度仅为 "decoration"。

上面的例子应该可行。

基本上,在更改报价集合时,我会更改 MinimumMaximum 绑定值以适应报价集合的最小值和最大值。

C# 部分:

public partial class MainWindow : Window,INotifyPropertyChanged
{
    private double _value;
    private double _minimum;
    private double _maximum;
    private DoubleCollection _tickCollection;

    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;

        TickCollection = new DoubleCollection();
        for (double i = 0.0; i < 5.0; i+=0.5)
        {
            TickCollection.Add(i);
        }
        Minimum = 0.0;
        Maximum = 5.0;
        Value = 2.3;

    }

    public double Value
    {
        get { return _value; }
        set
        {
            _value = value;
            OnPropertyChanged();
        }
    }

    public double Minimum
    {
        get { return _minimum; }
        set { _minimum = value; OnPropertyChanged(); }
    }

    public double Maximum
    {
        get { return _maximum; }
        set { _maximum = value; OnPropertyChanged(); }
    }

    public DoubleCollection TickCollection
    {
        get { return _tickCollection; }
        set
        {
            _tickCollection = value;
            OnPropertyChanged();
        }
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        TickCollection = new DoubleCollection();
        for (double i = 5.0; i < 10.0; i += 1.0)
        {
            TickCollection.Add(i);
        }
        Minimum = 5.0;
        Maximum = 10.0;
        Value = 2.3;

    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

XAML对方:

    <Grid>
    <Slider x:Name="mySlider" Width="400" Height="40" Ticks="{Binding TickCollection}"
            TickPlacement="TopLeft"
            Minimum="{Binding Minimum}"
            Maximum="{Binding Maximum}"
            Value="{Binding Value,Mode=TwoWay}"
            ></Slider>

    <TextBlock Text="{Binding Value}" HorizontalAlignment="Center" Margin="0,20" VerticalAlignment="Top"></TextBlock>
    <Button Content="Change Ticks" Click="ButtonBase_OnClick" HorizontalAlignment="Center" Margin="0,60" VerticalAlignment="Top"></Button>
</Grid>