2

OnRenderで独自のカスタム描画を行うコントロールがあります。ただし、必要に応じて、さまざまな描画の「パス」のステンシルのようなものとして、透明度のあるPNGを使用したいと思います。

これで、ImageBrushでPNGを使用して、それをコントロールのOpacityMaskとして設定できることがすでにわかっていますが、実際には、いくつかの異なるステンシルを使用していくつかの描画パスを実行したいと考えています。OpacityMaskルートを使用する場合は、個別のコントロール、個別のImageMaskを作成し、それらをすべて積み重ねて、ビジュアルツリーを乱雑にする必要があります。

私たちはそれをしたくありません。Control単一のサブクラスのOnRenderオーバーライドですべての描画を実行したいと思います。これらの描画呼び出しを画像でマスクしてほしいだけです。次に、描画が完了するまで、これを何度も繰り返します。

これを行う方法はありますか?

4

1 に答える 1

1

HA!それを見つけた!S / Oコミュニティがこれについてとても静かだったのは奇妙なことですが、それを探している人にとっては、それはDrawingContext.PushOpacityMask(そして対応する'Pop()')と呼ばれ、あなたが思っていることを正確に実行します...それは不透明度マスクをプッシュします(ブラシを介して)DCに描画し、その後のすべての描画は、ブラシの不透明度の値を基準にしています。

かなりクールな効果のために「マスク」を重ねることもできます。これらは、最後の1セットだけでなく、付加的なものです。

組み込みのOpacityMaskは、OnRender呼び出しでこの関数とともに使用されると確信しています。これが意味するのは、OpacityMask(最初にそれをプッシュした場合)を使用してから、独自の描画呼び出しに独自のマスクを使用できるということです。かなりきちんとしたもの!

これがこれを探していた他の人に役立つことを願っています。

于 2011-12-17T04:41:28.610 に答える