0

現在、レートを含むWPFプログレスバーを作成しています(Windows 8-Fancy Progress Bars API?を参照)。

以下のスクリーンショットは、私がこれまでに得たもの(左)と、学習演習の一部としてコードですべてがうまくいかなかったもの(右)を示しています。現在、可能な限り多くのXAMLを使用するようにコードバージョンを変換しようとしています。

ここに画像の説明を入力してください

私は、RateBaseと呼ばれる新しいクラスを作成し、それをRangeBaseと同様の方法で実装することで、ほとんどの方法を手に入れました。次に、新しいインスタンスを追加し、テンプレートファイルRangeGraphを提供しました。なるべく本でやろうと思っていますが、どうやって最終段階に取り組むのかわかりません。

ここでグラフを追加したいと思います。このグラフは、進行状況に応じて履歴的に変化したレートを表示するためのものです。バインドできる値として「Rate」がありますが、過去のレート値を含むDouble[]が必要な場所があると思います。私の質問は、これをどこに配置する必要があるか(RateBaseを汚染したくない)、テンプレートからどのようにバインドするかです(そこにプロパティを追加した場合、または私は間違っていますか?)

4

1 に答える 1

1

そうです、履歴データが必要になります。私の意見では、バインドされたDependencyプロパティRateが変更されるたびに、古い値をグラフコントロール自体(DPがある同じ場所)で定義されたIEnumerableに移動し、それを使用して線を描画する必要があります。私は個人的にMyControlDataという名前のクラスを作成し、そのインスタンスをコントロールに追加します。

また、を追加しTimer、現在のレートをIEnumerableに移動して、同じレートのより長いストリークが複数のバーとして表示されるようにすることもできます。実際に進捗状況を判断する方法によって異なります。ここで次のジレンマに陥る可能性があります。ほとんどの場合Rateとは異なる間隔での変化Percentage-何があなたのボートを浮かせますか?

コントロールのスコープに履歴を保持すると、アプリケーションはレートの履歴に依存しなくなりますが、必要に応じてコントロールに表示させることができます。

UserControlでDataBindingを使用するには<UserControl x:Name="myControl">、Control.xamlでノードを編集し、次に示すような名前を追加します。バインドする場合は、を参照してくださいElementName=myControl。これを実現する場合は、コントロール(またはMyControlData)にINotifyPropertyChangedを実装する必要があることに注意してください。または、依存関係プロパティとして直接実装することをお勧めします。

そしてところで、あなたがあなたが調べようとしていることを達成する方法がわからない場合ItemsControl。あなたがやりたいことは、ItemsControlandを使用するだけの簡単な方法で簡単に達成できると思いますItemsTemplate。ここで、ItemsSourceは履歴データであり、ItemTemplateはMaxRateと比較した現在のレートを示します。RateMaxRateは、DependencyPropertyの変更されたハンドラーから設定できるもう1つのプロパティです。

于 2012-05-29T20:29:19.247 に答える