サイズを変更しながらImageBrushをスケーリングしないでください。
-
12-10-2019 - |
質問
問題があります ImageBrush
:
<Window ... >
<Grid>
<Grid.Background>
<ImageBrush ImageSource="Controls\Images\notebook_paper_Line.jpg" TileMode="FlipX"
Viewport="0,0,1,0.09" />
</Grid.Background>
</Grid>
</Window>
ユーザーのサイズ変更ウィンドウ中に画像を繰り返したいです。しかし、現在、ユーザーがウィンドウを変更する間、画像はスケールを取得します。 (画像サイズは小さく、私は使用していることに注意してください TileMode
と Viewport
それを繰り返すために、それをサイズ変更中に問題が発生します!)。
どんなXAMLコードも素晴らしいでしょう! :)
そして、私は英語が悪いことをお詫びします!!!
解決
デフォルトでは、TileBrushのビューポートは0,0,1,1であり、ViewPortunitsはRelativeToboundingBoxです。つまり、宛先サイズ全体に0,0,1,1のマップ(この場合、グリッドの境界)がマップされます。
そのため、ImageBrushをタイル張りにする場合は、ViewPortを調整する必要があります。ビューポートを0,0、.5、.5に設定する場合、2 x 2のタイル張りの画像が表示されます(各タイルはグリッドのサイズの50%x50%です)、つまり0,0,0.25、0,0,0.25、 0.1は4x10タイルなどを生成します...
ただし、それはまだ画像の再スケーリングを妨げません。したがって、あなたの場合、おそらくあなたが望むのは、ビューポートを画像のサイズに設定し、relativeToboundingboxの代わりにビューポートウニットを絶対に設定することです。
下のXAMLには24x24ピクセルの画像があるので、それに応じてビューポートを設定します。これにより、グリッドのフルサイズのために画像を繰り返しタイルします。グリッドがサイズ変更されている場合、より多くのタイルが表示されます。
<ImageBrush ImageSource="Images\book_green.png" TileMode="FlipX"
Viewport="0,0,24,24" ViewportUnits="Absolute" />
それが役立つことを願っています。