我在滚动查看器内的画布上绘制了一个波形(音频文件的左声道)。我希望画布(以波形作为其内容)“移动”滚动查看器的可见窗口。这样做的目的是能够观察波形在屏幕上的移动,即使绘制的音频文件可能有几分钟的长度,也只能看到指定时间的窗口(可能是一个小小的剪辑)。我希望它绑定到一个时钟,这样当时钟开始时,波形开始移动(或者,滚动查看器的水平偏移前进)。我用Naudio绘制波形,使用C#& amp; WPF。绘制的波形是每100毫秒采样的文件中所有字节的图形。如何保持时钟和视窗同步?任何帮助或地方开始将不胜感激,因为这是我的第一个项目与此类事情。 感谢。
答案 0 :(得分:1)
如果我理解正确,那么您可以根据时间以编程方式滚动Canvas
的内容。下面我将展示一个示例算法。
您可以这样以编程方式滚动:
scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + 5); // Horizontal scroll through 5 units
使用计时器可能如下所示:
int InitInterval = Interval; // init interval
System.Timers.Timer myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(ScrollCanvas);
// set the interval
if (InitInterval > 0)
{
myTimer.Interval = InitInterval;
}
// turn on timer
myTimer.Enabled = true;
ScrollCanvas():
private void ScrollCanvas(object source, ElapsedEventArgs e)
{
// some code
// ...
// implementing scrolling
Dispatcher.BeginInvoke(new ThreadStart(delegate
{
scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + 5);
}));
}