RadialGradientBrush可以用來填充矩形(正方形)和橢圓(正圓),
填充區域使用比例座標,
橢圓的座標(0,0)和(1,1)構成的矩形內切於橢圓
即【0,第一個GradientStop】、【最後一個GradientStop,1】是實心的
因為是漸變的特點,所以LinearGradientBrush填充Line,RadialGradientBrush填充Ellipse、Rectangle都是成立的
<Line X1="10" Y1="10" X2="280" Y2="10" StrokeThickness="20"> <Line.Stroke> <LinearGradientBrush> <GradientStop Color="Yellow" Offset="0.1"/> <GradientStop Color="Red" Offset="0.1"/> <GradientStop Color="Blue" Offset="0.1"/> <GradientStop Color="Yellow" Offset="0.6" /> <GradientStop Color="Red" Offset="0.6"/> <GradientStop Color="Blue" Offset="0.6" /> <GradientStop Color="Yellow" Offset="0.9"/> <GradientStop Color="Red" Offset="0.9"/> <GradientStop Color="Blue" Offset="0.9"/> </LinearGradientBrush> </Line.Stroke> </Line>
兩頭都是實心的,中間的red被覆蓋掉
<Rectangle Height="140" Width="140"> <Rectangle.Fill> <RadialGradientBrush > <GradientStopCollection> <GradientStop Color="Yellow" Offset="0.1"/> <GradientStop Color="Red" Offset="0.1"/> <GradientStop Color="Blue" Offset="0.1"/> <GradientStop Color="Yellow" Offset="0.6" /> <GradientStop Color="Red" Offset="0.6"/> <GradientStop Color="Blue" Offset="0.6" /> <GradientStop Color="Yellow" Offset="1"/> <GradientStop Color="Red" Offset="1"/> <GradientStop Color="Blue" Offset="1"/> </GradientStopCollection> </RadialGradientBrush> </Rectangle.Fill> </Rectangle>
以上例子用的都是<RadialGradientBrush >,取預設值,
相當於<RadialGradientBrush GradientOrigin="0.5,0.5" RadiusX="0.5" RadiusY="0.5">
2.漸變圓位置和大小
漸變從開始點GradientOrigin以環形(橢圓) 的方式向外輻射,RadiusX,RadiusY是漸變橢圓的r1.r2GradientOrigin的值含義,在比例座標下,漸變橢圓的圓心。
Radiusx、Radiusy的值的含義,填充矩形時,以矩形邊長(xy) 一半為標準,也就是x2y/2為標準1,漸變園的1.2; 填充圓的時候,以半徑為標準1,漸變圓的
RadiusX=」m「,以(矩形/圓的)比例座標的長為1個標準length,
RadiusY=」n「,以(矩形/圓的)比例座標的寬為1個標準length,
①以(0.5,0.5)為圓心,RadiusX="m"為橢圓X軸半徑,RadiusY="n"為橢圓Y軸半徑畫橢圓E,
②在穿過GradientOrigin這一點並垂直於橢圓所在平面的直線上選一個點S(除GradientOrigin外)
③以這個橢圓為底,點S為頂點,會形成一個斜橢圓錐
④RadialGradientBrush就是該斜橢圓錐在平面上的投影,(S點的位置只會影響體積,不會影響其在平面上的投影,所以不用糾結S點的位置)
⑤再結合GradientStop,Offset=」h「的值就是以斜橢圓椎的高為標準」1「,以頂點為線段開端0,按比例h截斷斜橢圓椎,這個新的橢圓錐的地面也在平面上形成投影。
⑥另外不管GradientOrigin,RadiusX,RadiusY的值怎麼變,Offset=1時,以(0.5,0.5)為圓心都不變。
以上都是改變GradientOrigin,(RadiusX=RadiusY),觀察對投影的影響得出的
⑥可以通過設定 GradientOrigin,Offset=1,RadiusX,RadiusY,取0.4,0.5,0.6,再分別改變GradientOrigin的值,
點選設計頁面點選矩形,xaml會顯示中心點,觀察中心點和GradientOrigin,Offset=1,這個圓的關係可以得出。
例一:
<Rectangle Height="140" Width="140"> <Rectangle.Fill> <RadialGradientBrush GradientOrigin="0,1.1" RadiusX="0.6" RadiusY="0.6"> <RadialGradientBrush.GradientStops> <GradientStopCollection > <GradientStop Color="Yellow" Offset="0.1"/> <GradientStop Color="Red" Offset="0.1"/> <GradientStop Color="Blue" Offset="0.1"/> <GradientStop Color="Yellow" Offset="0.4" /> <GradientStop Color="Red" Offset="0.4"/> <GradientStop Color="Blue" Offset="0.4" /> <GradientStop Color="Yellow" Offset="0.6" /> <GradientStop Color="Red" Offset="0.6"/> <GradientStop Color="Blue" Offset="0.6" /> <GradientStop Color="Yellow" Offset="0.9"/> <GradientStop Color="Red" Offset="0.9"/> <GradientStop Color="Yellow" Offset="1"/> <GradientStop Color="Blue" Offset="1"/> </GradientStopCollection> </RadialGradientBrush.GradientStops> </RadialGradientBrush> </Rectangle.Fill> </Rectangle>
例二
<Ellipse Height="140" Width="140"> <Ellipse.Fill> <RadialGradientBrush GradientOrigin="1.1,0" RadiusX="0.3" RadiusY="0.3" > <GradientStop Color="Purple" Offset="0.1"/> <GradientStop Color="Yellow" Offset="0.6" /> <GradientStop Color="green" Offset="0.6" /> <GradientStop Color="Blue" Offset="1" /> <GradientStop Color="Black" Offset="1" /> </RadialGradientBrush> </Ellipse.Fill> </Ellipse>
CenterX="0.5" CenterY="0",取值依然選取比例座標系
以 CenterX="0.5" CenterY="0"為圓心,將圖形順時針旋轉Angle="90"。
為了便於觀察,顏色選取鮮豔顏色,並在Offset="0.66" 設定兩個GradientStop。
<Ellipse Stroke="Blue" Width="140" Height="140" Cursor="Hand" ToolTip="A Ball"> <Ellipse.Fill> <RadialGradientBrush GradientOrigin="0.2,0.8" RadiusX="0.75" RadiusY="0.75"> <RadialGradientBrush.RelativeTransform> <TransformGroup> <RotateTransform Angle="90" CenterX="0.5" CenterY="0.5"/> </TransformGroup> </RadialGradientBrush.RelativeTransform> <GradientStop Color="#FFFFFFFF" Offset="0"/> <GradientStop Color="#FF444444" Offset="0.66"/> <GradientStop Color="Red" Offset="0.66"/> <GradientStop Color="Yellow" Offset="1"/> </RadialGradientBrush> </Ellipse.Fill> </Ellipse>
在這個例子裡有意思的是 RadiusX="0.75" RadiusY="0.75"和Offset="0.66" 這兩個值
圓的外切矩形的外接圓的半徑是圓直徑的√2/2,約等於0.7
而0.75×0.66=0.495≈0.5,也就是說Offset="0.66"時,擷取的斜圓錐底面在平面上的投影與要填充的elipse大小基本一致。
這是球體的光影效果逼真的原因