0

我目前正在编写一个包含速率的 WPF 进度条(请参阅Windows 8 - Fancy Progress Bars API?)。

下面的屏幕截图显示了我到目前为止所获得的内容(左)以及作为我学习练习的一部分在代码中做得不好(右)。我现在正在尝试将代码版本转换为尽可能多地使用 XAML。

在此处输入图像描述

通过创建一个名为RateBase的新类并以与 RangeBase 类似的方式实现它,我已经完成了大部分工作。然后我添加了一个新实例并提供了一个模板文件RangeGraph。我正在尝试尽可能按照书本进行,但我不确定如何处理最后阶段。

我现在想添加一个图表,这个图表是为了显示速率,因为它随着进度的进展而在历史上发生了变化。我将“汇率”作为可以绑定的值,但我相信在某些地方我需要一个包含我的历史汇率值的 Double[]。我的问题是它应该放在哪里(我真的不想污染 RateBase)以及如何从我的模板绑定到它(如果我在那里添加属性,我不相信我可以绑定到 RangeGraph.cs 或者是我错了吗?)

4

1 回答 1

1

你是对的,你需要历史数据。在我看来,每当绑定的依赖属性Rate发生变化时,您应该将旧值移动到在图形控件本身(具有 DP 的同一位置)上定义的 IEnumerable 中,并使用它来绘制线条。我个人会创建一个名为 MyControlData 的类并将其实例添加到控件中。

您可能还想添加 aTimer并将当前 Rate 移到 IEnumerable 中,当它 Elapses 时,相同速率的较长条纹将显示为多个条。取决于您实际确定进度的方式。您可能会在这里陷入以下两难境地:在大多数情况下,Rate变化的间隔与Percentage大多数情况不同 - 什么让您的船漂浮?

将历史记录保留在您的控件范围内会使您的应用程序与您的 Rate 历史记录无关,但让您的控件根据需要显示它。

若要在 UserControl 中使用 DataBinding,请编辑<UserControl x:Name="myControl">Control.xaml 中的节点并添加一个名称,如下所示。无论您想在哪里绑定,请参阅ElementName=myControl。请注意,如果您想实现这一点,则必须在控件(或 MyControlData)上实现 INotifyPropertyChanged - 或者,建议直接将其实现为依赖属性。

顺便说一句,如果您不知道如何实现您想要查看的内容ItemsControl。我认为您想要做的事情可以通过使用ItemsControl和这样简单的方式轻松实现ItemsTemplate,其中 ItemsSource 是您的历史数据,而 ItemTemplate 描述了您当前的汇率与您的 MaxRate 相比。MaxRate 是您可以从 DependencyPropertyRate的更改处理程序中设置的另一个属性。

于 2012-05-29T20:29:19.247 回答