質問

アイテムのグループを処理する際に、グループのステータスの統一された画像を表示したかったので、基本的に、すべて同じセルに透明な背景とさまざまな色の前景を持つ多数のプログレスバーのグリッドを作成しました。

サンプル画像

いくつかの透明度のアーティファクトに遭遇しています(紫色のバーは実際には緑色の下で紫色であり、場合によっては上部に描画されます)。だから、私は自分で作ることにしましたが、今ではそれを行う方法について少し麻痺しています。 FrameworkElementのOnRenderでDrawingContextを使用しますか、それとももっと単純なものがありますか?独自のコントロールを作成する際の一般的なルールはありますか?

円グラフへの切り替えは容易に考えられるので、切り替えを検討しましたが、そのときはすぐに使えることをしました。

ありがとう!

役に立ちましたか?

解決

プログレスバーでさまざまな進行状況をどのように結合するかについてはよくわかりませんが、最も遠くに沿った進行状況がz-indexの下部にあり、最も遠くに沿った進行状況が上部にある場合は、これの行に何か:

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

2)NumberOfProgressesというプロパティがあり、その進捗状況を含む配列に関連付けられています。

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

4)ユーザーコントロールには、パーセンテージ値と配列内の進行状況のインデックスをパラメーターとして受け取るメソッドUpdateProgressがあります。

5)進行状況が更新されると、境界線の適切な幅(ユーザーコントロールの実際の幅*パーセンテージ)を計算してZインデックスを操作して上下に表示するか、境界線を積み重ねることができます水平方向に最小の進行を最初に設定し、残りの進行については、同じ効果を得るために前の進行の長さを差し引く必要があります。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top