在WPF中自定义你的绘制(二)

1,绘制几何图形

也许你在使用WPF进行开发的时候已经注意到一个很有意思的现象,要在屏幕上显示一个圆形(椭圆),你可以使用Ellipse对象,如下面的代码所示:

<Grid>
 <Ellipse Fill="#FFFFFFFF" Stroke="#FF000000" Margin="61,36,100,0" VerticalAlignment="Top" Height="33"/>
</Grid>

而另外一个名为EllipseGeometry的对象同样可以做到:

<GeometryDrawing Brush="Blue">
     <GeometryDrawing.Geometry>
          <EllipseGeometry Center="50,50" RadiusX="20" RadiusY="45" />
     </GeometryDrawing.Geometry>
     <GeometryDrawing.Pen>
           <Pen Thickness="1" Brush="Black" />
     </GeometryDrawing.Pen>

</GeometryDrawing>向后者这样由几何图形名称加Geometry后缀的,就是今天我们要讨论的几何图形.

我们可以发现,Ellipse继承于Shape类,EllipseGemotry继承于Geometry类,虽然我们利用它们都可以绘制圆形,但EllipseGeometry比Ellipse是更轻量级的类,我们使用它可以获得更好的性能效益,但EllipseGeometry不支持WPF布局系统(Layout)、输入和焦点。这也是Shape与Geometry的区别。

我们也可以使用C#代码像传统的绘制(OnPaint)一样来自定义我们的绘制:

protected override void OnRender(DrawingContext dc)
    {
      base.OnRender(dc);

      Geometry ellipse = new EllipseGeometry(new Point(100, 70), 100, 50);
      GeometryDrawing drawing = new GeometryDrawing(Brushes.LightBlue, new Pen(Brushes.Green,1), ellipse);

      dc.DrawDrawing(drawing);
    }

效果如下图:


其他基本几何图形(如RectangleGeometry,LineGeometry等)与此类似。

2, 绘制图片

最简单的使用图片的方式当然是利用Image控件,就像以前我们使用PictureBox一样,但更多的我们是使用自定义方式来绘制,ImageDrawing 对象为我们绘制图片提供了方便。

protected override void OnRender(DrawingContext dc)
    {
      base.OnRender(dc);
      BitmapImage bmp = new BitmapImage(new Uri("http://images.cnblogs.com/logo.gif", UriKind.Absolute));
       ImageDrawing drawing = new ImageDrawing(bmp, new Rect(10, 10, 326, 43));
      dc.DrawDrawing(drawing);
    }

效果如下:

时间: 2024-05-20 15:42:02

在WPF中自定义你的绘制(二)的相关文章

在WPF中自定义你的绘制(一)

在传统的Windows窗体编程中,如果我们需要打造一些比较个性化的控件,那么我们常常需要自定义控件的绘制(重写OnPaint等),即需要经常用到Graphics对象.而在WPF中,我们可以使用Xaml轻松编写出很有特色的界面元素,似乎与以前的以前利用Graphics对象手写代码绘制控件的日子越来越远了.其实在WPF中,如果我们需要低级别的自定义绘制同样是可以的,那么我们就需要一个名DrawingContext的类.与OnPaint方法相对应的是OnRender方法(当然,你也可以在其他地方进行绘

在WPF中自定义你的绘制(四)

原文:在WPF中自定义你的绘制(四)                                   在WPF中自定义你的绘制(四)                                                              周银辉 1,利用路径绘制图形(PathGeometry)有时我们需要绘制的图形可能很复杂而显得不是那么的规则,这时我们就需要将图形分解成若干小的部分(分解成线段.圆弧.贝塞尔曲线等等),然后将这些小部分使用PathGeometry组合在一起

在WPF中自定义你的绘制(五)

将我们的绘制转变为画刷 WPF中的画刷比GDI+中要强大得多,除了常用的实心画刷.渐变画刷外,还支持更多的平铺画刷,这包括DrawingBrush.ImageBrush.VisualBrush,其中DrawingBrush使得我们可以将自定义的绘制用于任何可以使用普通画刷的地方. 比如下面的代码,我们将自定义一个椭圆和一个矩形,然后将它们合并成一个图形并将 改图形用作窗口的背景画刷: public Window1() { InitializeComponent(); //background E

在WPF中自定义你的绘制(三)

图形合并 有时候我们需要将多个图形合并成一个然后进行绘制,比如将一个圆形与一个矩形进行合并等. 在WPF的自定义绘制中,有三种方法可以做到,分别是(1)利用GeometryGroup对象:(2)利用CombinedGeometry对象:(3)使用Geometry.Combin()静态方法.其中第一种方式是利用集合并可以向集合中添加任意多个元素,而后面两种方式只能两两合并,但后面两者的合并方式更灵活,可以是两图形的"交集""并集""差集"以及&qu

在WPF中自定义你的绘制(四)---part1

1,利用路径绘制图形(PathGeometry) 有时我们需要绘制的图形可能很复杂而显得不是那么的规则,这时我们就需要将图形分解成若干小的部分(分解成线段.圆弧.贝塞尔曲线等等),然后将这些小部分使用PathGeometry组合在一起实现最终的绘制. 一个PathGeometry对象有若干个PathFingure对象组成并保存在其Fingures属性中,一个PathFingure对象有若干个PathSegment对象组成并保存在其Segments属性中,而PathSegment则表示一些最基本的

在WPF中自定义你的绘制(四)---part3

<Viewbox x:Name="Group_46" Width="33.5947" Height="48.518" Canvas.Left="372.866" Canvas.Top="366.017"> <Canvas Width="33.5947" Height="48.518"> <Viewbox x:Name="Grou

在WPF中自定义你的绘制(四)---part2

<Path x:Name="Path_19" Width="82.6855" Height="13.2431" Canvas.Left="459.496" Canvas.Top="440.29" Stretch="Fill" Data="F1 M 501.059,440.443C 523.891,441.22 542.302,444.746 542.181,448.319

WPF中自定义漂亮的进度条

wpf中自带的进度条是这个样子德. 在2003中这个进度条的样子就会变得非常难看. 在wpf中您可以自己制作任意样式的进度条.如下图: UserControl.xaml 用户控件 <Grid x:Name="LayoutRoot" Background="Transparent" HorizontalAlignment="Center" VerticalAlignment="Center"> <Grid.Re

关于VB2008中MSChart控件绘制二维折线图时更改线宽

问题描述 各位高手,1.我在VB2008(.net3.5sp1)中用MSChart控件绘制折线图时,线宽似乎默认为1个像素,我觉得太粗了,绘制3万多点无法分清,有无属性可以缩小此线宽????2.我在MSDN和Google及Baidu中均查过,未找到适用VB2008的.找到MSChart.Plot.SeriesCollection.pen.width只有VisualBasic.NET2003中有,在2008中打不出来的请高手赐教请写详细点属性的位置如果试过那就更感谢了!!! 解决方案 解决方案二: