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

图形合并

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

1 ,使用GeometryGroup对象进行图形合并

参考以下代码,我们合并了一个椭圆与一个矩形:

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

      //public sealed class GeometryGroup : Geometry
      EllipseGeometry ellipse = new EllipseGeometry(new Point(50, 50), 50, 20);
      RectangleGeometry rect = new RectangleGeometry(new Rect(50, 50, 50, 20), 5, 5);

      GeometryGroup group = new GeometryGroup();
      group.FillRule = FillRule.EvenOdd;
      group.Children.Add(ellipse);
      group.Children.Add(rect);

      dc.DrawGeometry(Brushes.LightBlue, new Pen(Brushes.Green, 2), group);
    }

效果图如下:


我们只是简单地将两个图形以相加的方式合并在了一起,注意到合并后的图形中间部分出现一个镂空的无色区域,是由合并后的图形的FillRull决定的,如果我们把group.FillRule = FillRule.EvenOdd;更改为 group.FillRule = FillRule.Nonzero;则填充效果将是如下这样:

时间: 2024-12-31 02:35:43

在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中自定义你的绘制(二)

1,绘制几何图形 也许你在使用WPF进行开发的时候已经注意到一个很有意思的现象,要在屏幕上显示一个圆形(椭圆),你可以使用Ellipse对象,如下面的代码所示: <Grid> <Ellipse Fill="#FFFFFFFF" Stroke="#FF000000" Margin="61,36,100,0" VerticalAlignment="Top" Height="33"/> &

在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

WPF中实现PropertyGrid的三种方式

由于WPF中没有提供PropertyGrid控件,有些业务需要此类的控件.这篇文章 介绍在WPF中实现PropertyGrid的三种方式,三种方式都是俺平时使用时总结出 来的. 第一种方式:使用WindowsForm的PropertyGrid控件. 用过WPF的童鞋都晓得,可以通过WindowsFormsHost将WindowsForm的控件宿 主到WPF中使用.很简单,分为简单的3步. 第一步:引用dll:在WPF应用程序中引入System.Windows.Forms.dll. 第二步:引用命