プログレスバーでさまざまな進行状況をどのように組み合わせるつもりなのかよくわかりませんが、進行状況に沿った最も遠いものがz-indexの下部にあり、進行状況に最も沿っていないものが上部にあるとしたら、この行:
1) おそらく、この新しいプログレスバーのユーザー コントロールを作成します。
2) NumberOfProgresses と呼ばれるプロパティがあり、進行状況のステータスを含む配列に関連付けられています。
3) 各進行状況は、Border アイテム (またはおそらくビジュアル ツリーの上位にあるより適切なもの) によって表されます。これは、background プロパティを持つ単純な wpf コントロールであるためです。background プロパティは見栄えのする進行状況スタイルに設定され、進行状況の色は境界線の borderbrush プロパティと言うスタイルにバインドできます。進行状況の色を簡単に設定できます。
4) ユーザー コントロールには、パーセンテージ値と配列内の進行状況のインデックスをパラメーターとして受け取るメソッド UpdateProgress があります。
5) 進行状況が更新されると、境界線の適切な幅 (ユーザー コントロールの実際の幅 * パーセンテージ) を計算し、Z インデックスをいじって上部/下部に表示するか、境界線を水平に積み重ねて設定することができます。最初のように進行が最も遅い場合、残りの進行については、同じ効果を得るために以前の進行の長さを差し引く必要があります。
このようにして、透明性によって引き起こされるアーティファクトやOnRender()はありません.WPFでは、WinFormsでOnPaintが必要だったように、OnRender thisとOnRender thatをいじる理由はないはずです。コードを介して要素を設定して、必要な外観を取得し、WPF にレンダリングさせます ;)
ただし、このユーザー コントロールには 1 つの問題があると想像できます。どの色がどの進行状況に属しているかについて、ユーザーにフィードバックを提供する必要があります。しかし、それはおそらく振り出しに戻るでしょう。つまり、複数のプログレスバーを表示する方が良い/簡単です。