大家帮小弟我下,要不今天要加班,10点也回不到家,画扇形的有关问题
大家帮我下,要不今天要加班,10点也回不到家,画扇形的问题?
我的需求是这样的:
我自己新建一个用户自定义的用户控件页面,我想在上面画一个扇形,扇形颜色设置为红色,背景颜色设置为黄色的;
我自己写了一部分代码:
Bitmap objbitmap = new Bitmap(40, 40);
Graphics objgraphics = Graphics.FromImage(objbitmap);
//画一个白色背景
objgraphics.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, 40, 40);
//以下为画饼图
objgraphics.FillPie(new SolidBrush(System.Drawing.Color.Red), 40, 40, 20, 20, 45, 30);
this.AddChild(objbitmap);
但是不知道怎么显示?
------解决思路----------------------
写在Paint事件里去
------解决思路----------------------
到底是要直接画在用户控件上还是画在用户控件里的某个控件上?
------解决思路----------------------
那就把你代码写进用户控件的Paint事件里去呗
------解决思路----------------------
是这样吗?
------解决思路----------------------
------解决思路----------------------
那你自己在构造函数里加这句: this.Paint += new PaintEventHandler(UserControl1_Paint);
------解决思路----------------------
控件上的图案怎么来的?重绘,怎么重绘的?执行了Paint事件或PaintBackground事件,所以想在控件上画东西你就得写在Paint事件里,你得知道本质的东西和原理
------解决思路----------------------
你不早说是WPF 我给你说的是winform的做法
------解决思路----------------------
------解决思路----------------------
WPF不是很熟,我只知道WPF中绘制需要OnRender方法和DrawingContext对象,上面只是个思路,
------解决思路----------------------
https://social.msdn.microsoft.com/Forums/windowsserver/zh-CN/adf8fffc-a610-4b69-ab90-4862e24adf62/wpf-?forum=wpfzhchs 你参考下吧 只能帮到这儿了
------解决思路----------------------
DrawingVisual drawVisual = new DrawingVisual();
DrawingContext drawContext = drawVisual.RenderOpen();
drawContext.DrawImage(background, new Rect(0, 0, 800, 500)); //画图片
drawContext.DrawText(new FormattedText(GetCarNameById(dicCarInfo, item.Key), CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 15, Brushes.Black), new Point(points[i].M_Point.X, points[i].M_Point.Y - 16));//写文字
------解决思路----------------------
打开Blend,拖一个饼形控件(pie),调整一下属性,就出来了

我的需求是这样的:
我自己新建一个用户自定义的用户控件页面,我想在上面画一个扇形,扇形颜色设置为红色,背景颜色设置为黄色的;
我自己写了一部分代码:
Bitmap objbitmap = new Bitmap(40, 40);
Graphics objgraphics = Graphics.FromImage(objbitmap);
//画一个白色背景
objgraphics.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, 40, 40);
//以下为画饼图
objgraphics.FillPie(new SolidBrush(System.Drawing.Color.Red), 40, 40, 20, 20, 45, 30);
this.AddChild(objbitmap);
但是不知道怎么显示?
------解决思路----------------------
写在Paint事件里去
------解决思路----------------------
到底是要直接画在用户控件上还是画在用户控件里的某个控件上?
------解决思路----------------------
那就把你代码写进用户控件的Paint事件里去呗
------解决思路----------------------
------解决思路----------------------
private void UserControl1_Paint(object sender, PaintEventArgs e)userControl1为用户控件,响应Paint事件
{
//Bitmap objbitmap = new Bitmap(200, 200);
//Graphics objgraphics = Graphics.FromImage(objbitmap);
Graphics objgraphics = e.Graphics;
objgraphics.DrawPie(new Pen(System.Drawing.Color.Yellow, 5), 0, 0, 100, 100, 45, 45);
objgraphics.FillPie(new SolidBrush(System.Drawing.Color.Red), 0, 0, 100, 100, 45, 45);
}
------解决思路----------------------
那你自己在构造函数里加这句: this.Paint += new PaintEventHandler(UserControl1_Paint);
------解决思路----------------------
控件上的图案怎么来的?重绘,怎么重绘的?执行了Paint事件或PaintBackground事件,所以想在控件上画东西你就得写在Paint事件里,你得知道本质的东西和原理
void drawPie(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, 0, 0, 111, 111);
g.FillPie(Brushes.Red, 0, 0, 111, 111, 45, 30);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
drawPie(e);
}
------解决思路----------------------
你不早说是WPF 我给你说的是winform的做法
------解决思路----------------------
你不早说是WPF 我给你说的是winform的做法
我的是WPF的,不好意思了。WPF有解决办法么。
protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);
dc.DrawPie(new Pen(System.Drawing.Color.Yellow, 5), 0, 0, 100, 100, 45, 45);
dc.FillPie(new SolidBrush(System.Drawing.Color.Red), 0, 0, 100, 100, 45, 45);
}
------解决思路----------------------
你不早说是WPF 我给你说的是winform的做法
我的是WPF的,不好意思了。WPF有解决办法么。protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);
dc.DrawPie(new Pen(System.Drawing.Color.Yellow, 5), 0, 0, 100, 100, 45, 45);
dc.FillPie(new SolidBrush(System.Drawing.Color.Red), 0, 0, 100, 100, 45, 45);
}
------解决思路----------------------
https://social.msdn.microsoft.com/Forums/windowsserver/zh-CN/adf8fffc-a610-4b69-ab90-4862e24adf62/wpf-?forum=wpfzhchs 你参考下吧 只能帮到这儿了
------解决思路----------------------
DrawingVisual drawVisual = new DrawingVisual();
DrawingContext drawContext = drawVisual.RenderOpen();
drawContext.DrawImage(background, new Rect(0, 0, 800, 500)); //画图片
drawContext.DrawText(new FormattedText(GetCarNameById(dicCarInfo, item.Key), CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 15, Brushes.Black), new Point(points[i].M_Point.X, points[i].M_Point.Y - 16));//写文字
------解决思路----------------------
打开Blend,拖一个饼形控件(pie),调整一下属性,就出来了
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"
x:Class="WpfApplication3.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Grid>
<ed:Arc ArcThickness="1" ArcThicknessUnit="Percent" EndAngle="170" Fill="#FFE74514" HorizontalAlignment="Right" Height="100" Margin="0,53,36,0" Stretch="None" Stroke="Black" StartAngle="100" VerticalAlignment="Top" Width="100"/>
</Grid>
</Window>