您的位置:首页 > 其它

WPF画刷、形状和变换学习笔记

2014-03-03 11:18 429 查看

形状,画刷和变换

形状是元素:

这样会带来许多重要的结果:

v 形状绘制自身。不需要管理无效的情况和绘制过程。

v 使用与其他元素相同的方式组织形状。可在任何布局容器中放置形状。

v 形状支持与其他元素相同的事件。

所有的形状类都继承自Shape类

Rectangle,Ellipse,Line,Polyline ,Polygon,Path。

Shape类的重要属性:

Fill:绘制形状表面的画刷对象。

Stroke:设置绘制形状边框的画刷对象。

StrokeThickness:设置边框的宽度。

StrokeStartLineCap/StrokeEndLineCap:决定开始或结束端边缘的轮廓。

StrokeDashArray/StrokeDashOffset/StrokeDashCap:用于在形状周围创建点画线边框。

StrokeLineJoin:确定形状拐角处的轮廓。

Stretch:确定形状如何填充可用区域。

可使用ViewBox控件缩放形状。

<Viewbox Grid.Row="1" HorizontalAlignment="Left" Stretch="Fill" StretchDirection="Both">

            <Canvas Width="200" Height="150" Background="Black">

                <Ellipse Fill="Yellow" Stroke="Blue" Canvas.Left="10" Canvas.Top="50"

                         Width="100" Height="50" HorizontalAlignment="Left"/>

                <Rectangle Fill="Yellow" Stroke="Blue" Canvas.Left="30" Canvas.Top="40"

                           Width="100" Height="50" HorizontalAlignment="Left"/>

            </Canvas>

        </Viewbox>

默认情况下,ViewBox元素按比例进行缩放。保持他所包含内容的纵横比。可使用ViewBox.Stretch属性改变这行为。

为了是ViewBox元素执行缩放工作,需要能够确定两部分信息:内容应该具有的原始尺寸和希望内容具有的尺寸。

第二个细节——新尺寸。Viewbox元素根据Stretch属性。让其内部的内容使用所有可用空间。

第一个细节——原始尺寸不使用ViewBox元素的尺寸时,隐含在定义嵌套内容的方式中。例如前面的例子Canvas Width="200" Height="150" 椭圆的宽是100,当缩放时始终保持椭圆的宽是面板的一般。这种硬编码不会限制布局的灵活性。

Line直线

PolyLine绘制线条。

polygon和PolyLine的区别是,前一个是一个闭合的图形。

对于线条从不相交的简单形状来说,填充其内容是很容易做到的。但是有时会遇到复杂的形状。polygon有个FillRule属性,该属性用于从两种方式中选择一种填充。默认为EvenOdd

WPF计算原则是为了到达形状的外部必须穿过的直线数量。如果是奇数就填充,如果是偶数,就不填充。

 

                                                经过一条直线填充

 

经过两条直线不填充

   FillRule=EvenOdd

FillRule=Nonzero

穿过直线的数量和直线的方向。

变换,通过使用变换transform,许多绘图任务将更趋简单。变换是通过不加通告的切换形状或元素使用的坐标系统改变形状或元素绘制方式的对象。

在WPF中,变换由继承自System.Windows.Media.Transform抽象类的表示。

TranslateTransform:将坐标系统移动一定距离。如果希望在不同的地方绘制相同的形状,该变换很有用。重要属性X,Y。

RotateTransform:旋转坐标系统。正常绘制的图像绕着旋转中心绘制。重要属性Angle,CenterX,CenterY

ScaleTransform:放大或缩小坐标系统,从而绘制更大或更小的图形。可在X和Y方向应用不同的缩放度,从而拉伸或压缩形状。

SkewTransform:通过倾斜一定的角度扭曲坐标系统。例如如果绘制正方形,通过该变换正方形可编程平行四边形。

MatrixTransform:使用提供的矩阵的乘积修改坐标系统。使用这种变换需要一定的数学基础。

TransformGroup:组合多个变换,从而可以一次应用所有变换。

为了变换形状,将RenderTransform属性指定为希望使用的变换对象。根据使用的变换对象,需要填充不同的属性以配置变换对象。

例子

<Rectangle Width="80" Height="5" Stroke="Blue" Fill="Yellow"

                       Canvas.Left="100" Canvas.Top="100">

                <Rectangle.RenderTransform>

                    <RotateTransform Angle="50" CenterX="45" CenterY="5"/>

                </Rectangle.RenderTransform>

            </Rectangle>

旋转角度Angle,旋转中心点centeX和CenterY,但是这两个属性是具体的尺寸,对于动态的内容,这样设置不合理。

RenderTransformOrigin:这个属性使用的是相对坐标,(0,0)表示左上角,(1,1)表示右下角。也可是使用大于1或小于0的值设置,这样旋转中心就会在形状的外面。

LayoutTransform:在布局之前应用变换,开销大。

RenderTransform:在布局之后应用变换

透明:WPF支持真正的透明效果。

可通过以下几种方式设置元素半透明

设置元素的Opacity属性。0-1,1表示完全不透明,0表示完全透明。

设置画刷的Opacity属性。

使用具有透明Alpha值得颜色,所有Alpha值小于255的颜色都是半透明的。

透明掩码

Opacity属性是元素所有内容都是部分透明的。OpacityMask属性提供了更大的灵活性,可使元素部分区域透明或部分透明

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: