2009-04-29 20 views
3

アイテムのグループを処理する際、グループのステータスの統一されたイメージを表示したかったので、透明な背景とさまざまな色のフォアグラウンドのグリッドを基本的に作成しました同じ細胞。WPFカスタム描画複数プログレスバー

sample image http://i40.tinypic.com/2lksj6x.png

私は(紫のバーが緑の下で実際に紫で、そして時にはなど、トップの上に描画します)いくつかの透明性のアーティファクトに実行していることだし、それは少しだけ無駄なようです。だから私は自分で作ることにしましたが、今はどうやってそれをやるのか少し麻痺しました。私は、FrameworkElementのOnRenderでDrawingContextを使用していますか、それとももっと簡単なものがありますか?それはあなた自身のコントロールを作ることについては、一般的なルールのセットはありますか?

私は円グラフに切り替えることを熟考しましたが、それは簡単に来ることができるからですが、その時は私は既成ではない何かをしました。

ありがとうございます!

答えて

1

進捗状況をどのように組み合わせるかはわかりませんが、進行状況のうち最も遠いものがZ-インデックスの最下部にあり、最も進んでいないものが一番上にあるとしたら、

1)おそらくこの新しいprogresbarのユーザーコントロールを作成します。

2)NumberOfProgressesというプロパティがあります。このプロパティは、進捗状況を含む配列で結ばれています。

3)バックグラウンドプロパティを持つ単純なwpfコントロールなので、各進捗状況はBorderアイテム(またはおそらくビジュアルツリーの上に適しています)によって表されます。背景のプロパティは見栄えの良い進捗スタイルに設定され、進行状況の色は境界線のborderbrushプロパティを表すスタイルにバインドできます。進捗状況の色を簡単に設定できます。

4)ユーザーコントロールにはUpdateProgressメソッドがあり、配列の進捗率とパーセンテージ値をパラメータとして取ります。

5)進捗状況が更新されると、ボーダーの適切な幅(ユーザーコントロールの実際の幅*割合)を計算し、Zインデックスで上/下に表示されるか、横方向に境界を定め、最初に進捗状況に沿って最も少なく設定し、残りの進捗については前の進捗の長さを差し引いて同じ効果を得る必要があります。

この方法では、透明性に起因するアーティファクトがなく、OnRender()はありません。 WPFでは、OnRenderとOnPaintを使用したWinFormsで必要だったOnRenderとこれを混乱させる理由はありません。 コードを使って要素を設定して、あなたが望む外観を得て、WPFにレンダリングさせるようにしてください;)

このユーザーコントロールでは1つの問題は想像できます。どの色がどの進捗状況に属するのかをユーザーにフィードバックする必要があります。しかし、それはおそらく正方形に戻ってきます。つまり、複数のプログレスバーを表示するほうが簡単です。

+0

だから、これは純粋に.csファイルであろうか? – Thomas

+0

ユーザーコントロールの作成方法によって異なります。他のアプリケーションでそれを再利用するつもりがない場合は、xamlとcsで構成される新しいwpf UserControlをソリューションに追加することになります。 xamlの部分では、基本的なレイアウトを定義します。主に、進捗を表す境界項目のコンテナです。そしてcsファイルでは、実際に新しい罫線を作成し、それらをコンテナに配置するコードを書いています。また、更新の進行方法も... – Marko

関連する問題