我的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);
}
我在处理滑块的滑动时遇到问题,当它快速滑动时,并非所有的ValueChange都被拾取。例如,如果我使用箭头键控制滑块100%如下所示:
但是如果我将它滑动到100%正常速度,它只会加载一部分值,因为我想它会快速移动以触发每个传递的值的事件:
我的问题是如何更好地处理我的滑块事件,这样我就可以将其滑动并加载所有值,无论它移动得多快还是实时更新图形?
任何想法或帮助都将受到高度赞赏,为人们欢呼。
答案 0 :(得分:1)
我的问题是如何才能更好地处理我的滑块事件,这样我就可以将其滑动并加载所有值,无论它移动的速度有多快,还是实时更新图形?
您可以计算事件处理程序中新值和旧值之间的差异,并为每个不同的点调用您的方法一次。像这样:
public async void ProgressSliderEvent(object sender, System.Windows.RoutedPropertyChangedEventArgs<double> e)
{
if (e.NewValue > e.OldValue)
{
double diff = e.NewValue - e.OldValue;
for (double d = 0; d < diff; ++d)
{
await this.mainWindow.DisplayNewPoint();
}
}
else if (e.OldValue > e.NewValue)
{
double diff = e.OldValue - e.NewValue;
for (double d = 0; d < diff; ++d)
{
await this.mainWindow.DisplayNewPoint();
}
}
this.mainWindow.UpdateGUI(e.NewValue);
}