首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#WPF OnPaint方法替代?

在C# WPF中,OnPaint方法是Windows Forms中的一个方法,用于在窗口或控件上绘制图形。在WPF中,我们使用不同的方法来实现图形绘制。以下是一些替代方法:

  1. 使用DrawingVisual对象和DrawingContext对象进行绘制。

首先,创建一个DrawingVisual对象,然后在其上创建一个DrawingContext对象。接下来,使用DrawingContext对象的各种方法(如DrawRectangle、DrawText等)来绘制图形。最后,将DrawingVisual对象添加到UIElement的VisualChildren集合中。

代码语言:csharp
复制
DrawingVisual visual = new DrawingVisual();
using (DrawingContext context = visual.RenderOpen())
{
    context.DrawRectangle(Brushes.Red, null, new Rect(new Point(0, 0), new Size(100, 100)));
}

// 将DrawingVisual对象添加到UIElement的VisualChildren集合中
UIElement.AddVisualChild(visual);
  1. 使用Path、Shape等控件进行绘制。

WPF中有许多内置的控件,如Path、Ellipse、Rectangle等,可以直接在XAML中或代码中使用这些控件进行绘制。

代码语言:csharp
复制
// 在XAML中使用Path控件进行绘制
<Path Stroke="Red" StrokeThickness="2" Data="M 0,0 L 100,100" />

// 在代码中使用Path控件进行绘制
Path path = new Path();
path.Stroke = Brushes.Red;
path.StrokeThickness = 2;
path.Data = Geometry.Parse("M 0,0 L 100,100");
  1. 使用WriteableBitmap进行绘制。

WriteableBitmap是WPF中的一个类,可以用于在内存中创建位图,并在其上绘制图形。

代码语言:csharp
复制
WriteableBitmap bitmap = new WriteableBitmap(200, 200, 96, 96, PixelFormats.Pbgra32, null);
bitmap.Lock();
IntPtr ptr = bitmap.BackBuffer;

// 在位图上绘制图形
// ...

bitmap.AddDirtyRect(new Int32Rect(0, 0, 200, 200));
bitmap.Unlock();

// 将位图显示在UI上
Image image = new Image();
image.Source = bitmap;

总之,在WPF中,我们可以使用不同的方法来替代OnPaint方法进行图形绘制。具体使用哪种方法取决于具体的需求和场景。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • VC++6.0中改变窗口背景颜色和控件背景颜色,CDC,我的感觉

    1.改变对话框的背景色 在C…App类中的InitInstance()里添加 SetDialogBkColor(RGB(0,192,0),RGB(0,0,0)); 2.如果想改变静态文本或单选按钮的背景色可以用你说的那个获得控件ID,然后设置背景色,具体步骤: (1)响应对话框类的WM_CTLCOLOR消息生成OnCtlColor函数 (2)为对话框类添加成员变量CBrush m_brush; 并在初始化函数中初始化m_brush.CreateSolidBrush(RGB(0,255,0)); (3)在OnCtlColor函数中添加代码以改变控件的文字颜色和背景色 switch(pWnd->GetDlgCtrlID()) { case(IDC_INPUT):   pDC->SetTextColor(RGB(255,0,192));   pDC->SetBkMode(TRANSPARENT);   return m_brush;   break; case(IDC_EDIT1):   pDC->SetTextColor(RGB(255,0,0));   pDC->SetBkMode(TRANSPARENT);   return m_brush;   break; case(IDC_CHOICE):   pDC->SetTextColor(RGB(255,128,0));   pDC->SetBkMode(TRANSPARENT);   return m_brush;   break; case(IDC_RADIO1):   pDC->SetTextColor(RGB(255,0,20));   pDC->SetBkMode(TRANSPARENT);   return m_brush;   break; default:   break; } 3.如果想改变按钮的背景色,简直太难了,你要重写两个类,还需要在网上下,孙鑫的视频教程中也简单介绍了这个,可只是改变按钮的文字颜色

    03

    Invalidate介绍[通俗易懂]

    1、Invalidate介绍  void Invalidate( BOOL bErase = TRUE );   该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。2、与UpdateWindow( )的区别  UpdateWindow( )的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。Delphi中的代码procedure TWinControl.Invalidate;begin Perform(CM_INVALIDATE, 0, 0);end;这个方法会使窗口重绘。

    01

    8.wxPython设置图像遮罩(mask)的方法

    以上面这幅图画为例,嫁接昨天的桌面宠物代码,我们讲解wxPython图像处理为图像设置遮罩的方法。wxPython图像处理类有wx.Image和wx.Bitmap,其中wx.Image是一个与平台无关的类,可以加载各种格式的图形文件,而wx.Bitmap可以将图形显示在屏幕。一般先由wx.Image将图像文件加载,然后转换成wx.Bitmap对象,最后显示在屏幕上。wx.Image有两个函数可以设置图像遮罩:SetMaskColour和SetMaskFromImage,wx.Bitmap有一个函数可以设置图像遮罩:SetMaskColour。今天我们的代码就通过三个函数都实现了图片背景图像遮盖掉的目的。具体实现语句在img.SetMaskColour(255, 242,0),img.SetMaskFromImage(img,255, 242,0),self.bg.SetMaskColour((255, 242,0))三处。

    01
    领券