【发布时间】:2017-07-20 08:05:48
【问题描述】:
我的 WPF 上有一个图表来显示一些图表,该图表绑定到一个名为 DisplayPoints 的列表,当滑块值发生更改时,一个点被移动到 DisplayPoints 以使其出现在图表上。这是 XAML 的图表:
<oxy:Plot Name="Plot" Margin="0,0,10,0" Background="WhiteSmoke">
<oxy:Plot.Series>
<oxy:LineSeries ItemsSource="{Binding DisplayPoints}" Color="Transparent" MarkerFill="SteelBlue" MarkerType="Circle"/>
</oxy:Plot.Series>
<oxy:Plot.Axes>
<oxy:LinearAxis Position="Left" Minimum="0" Maximum="{Binding BuildPlateSize}"/>
<oxy:LinearAxis Position="Bottom" Minimum="0" Maximum="{Binding BuildPlateSize}"/>
</oxy:Plot.Axes>
</oxy:Plot>
我在此图下方还有一个滑块,用于控制图上显示的图的百分比,我目前正在使用 ValueChanged 事件处理其事件,这是因为要求在图滑过时对其进行更新而不是一旦失去焦点等。此滑块的 XAML 是:
<Slider Name="ProgressSlider" Width="300" Minimum="0" Value="0" Height="30" Foreground="Black" BorderBrush="Black" IsSnapToTickEnabled="True"/>
最大值设置为图形的点数,并为滑块上的每个值创建一个刻度。事件处理如下:
public async void ProgressSliderEvent(object sender, System.Windows.RoutedPropertyChangedEventArgs<double> e)
{
if (e.NewValue > e.OldValue)
{
await this.mainWindow.DisplayNewPoint();
}
else if (e.OldValue > e.NewValue)
{
await this.mainWindow.RemovePoint();
}
this.mainWindow.UpdateGUI(e.NewValue);
}
我在处理滑块的滑动时遇到问题,当它快速滑动时,并不是所有的 ValueChanges 都被拾起。例如,如果我要使用箭头键 100% 控制滑块,则如下所示:
但是,如果我将它滑到 100% 正常速度,它只会加载一部分值,因为我想它会快速移动,以便为每个传递的值触发一个事件:
我的问题是如何更好地处理滑块的事件,让我可以滑动它并加载所有值,无论它移动多快,但实时更新图形?
任何想法或帮助将不胜感激,干杯。
【问题讨论】:
-
与其发布一个全新的问题,不如编辑your previous, identical question 来改进它。不管怎样,你真的应该付出一些努力来产生一个实际的minimal reproducible example。如前所述,你的问题太宽泛了。基本答案仍然相同:您需要在观察到的值之间进行插值。但是如何做到这一点有很多可能的答案。
-
@PeterDuniho 那么你想让我做什么,我提供了一个最小而完整的例子?我只包含了相关代码,为了创建一个“工作”示例,我需要提供很多不相关的代码,并且在我看来,这使得问题比仅仅拥有最低限度的代码更糟糕。我也没有多少时间,我以为这样就够了,我尽量把自己说清楚,还有什么办法呢?
-
如果在“最小值”设置为 0 且“最大值”设置为 100 时将拇指从曲目的开头拖动到结尾,您是否期望恰好获得 100 个事件?或者您的问题是什么?
-
@mm8 所以我将滑块设置为捕捉到刻度,每个值都有一个刻度,最大值设置为图表上的点数。我希望得到恰好 N 个事件,其中 N 是点数