不使用笔划属性如何勾勒椭圆?

时间:2018-07-25 22:01:35

标签: c# wpf

我真正想要的是在WPF形状(例如椭圆形)上具有负笔触厚度值的方法,以便笔迹轮廓朝着LEFT和TOP of Shape(而不是形状内部)向外绘画,从而覆盖我的笔迹。当我使笔触的感觉太粗时输入文本...我希望椭圆的半径保持恒定,但是笔触随着思考的增加而向外增长,并且形状的左,顶位置应与内部保持一致填充保持相同的大小,并且不会随着大小的增加而被中风遮盖。

我尝试了DropShadowEffect,但是它太模糊了,定义不够好...看起来有点凌乱...真的,我只想在形状的外部绕实线...

enter image description here

从上面的图片可以看到,我尝试使用下面的代码在两个椭圆上放置阴影。问题是我希望它是外部的纯色,就像另一种不同颜色的椭圆的scaletrans一样。

var e = new Ellipse();
DropShadowEffect effect = new DropShadowEffect();
effect.Color =Colors.Orange;
effect.Direction = 0;
effect.BlurRadius = 30;
effect.ShadowDepth = 4;
effect.Opacity=0;
e.Effect = effect;

t.Text   = string.Format("abc");
t.Measure(new Size(gwin.XStep, gwin.YStep));
t.Arrange(new Rect(t.DesiredSize));
e.StrokeThickness = 2;              
e.Stroke  = Brushes.Black;      
canvas.Children.Add(e);
canvas.Children.Add(t);

解决问题的另一个可能方向:

<Ellipse RenderTransformOrigin="0.5,0.5">
    <Ellipse.RenderTransform>
        <TransformGroup>
            <ScaleTransform/>
        </TransformGroup>
    </Ellipse.RenderTransform>  
</Ellipse>           

转换为C#代码,然后将一个scaletransform椭圆放置在另一种不同颜色的缩放后的转换椭圆的中间,但是不确定如何设置。

解决方案:

基于以下建议。我尝试创建一个网格,将网格的宽度和高度设置为椭圆的大小,然后向网格中添加两个具有不同颜色的椭圆,一个椭圆的边距设置为-10。而且效果很好...将其添加到网格中时,只需将带有-10边距-10的较大椭圆放置在另一个椭圆之后...这就是现在的样子。

enter image description here

解决方案在这里某处:

        g    = new Grid();
        e    = new Ellipse();
        h    = new Ellipse();
        t    = new TextBlock();
        t.HorizontalAlignment = HorizontalAlignment.Center;
        t.VerticalAlignment   = VerticalAlignment.Center;
        t.FontWeight          = FontWeights.ExtraBold;
        g.Children.Add(h);
        g.Children.Add(e);
        g.Children.Add(t);          
        gwin.canvas.Children.Add(g);
                t.Text = String.Format("{0}.{1}", x, y);
                g.Width  = gwin.XStep;
        g.Height = gwin.YStep;
        Canvas.SetLeft (g, gwin.X1 + gwin.XStep*x*2);
        Canvas.SetTop  (g, gwin.Y1 + gwin.YStep*y*2);           
        e.StrokeThickness = 2;              
        e.Stroke  = Brushes.Black;              

        h.Margin = new Thickness(-10);

2 个答案:

答案 0 :(得分:2)

您可以像这样在相互重叠的网格内使用双椭圆形:

<Grid Width="100" Height="100">
    <Ellipse Fill="Black"  Margin="-10"/>
    <Ellipse Fill="Red" />
</Grid>

即使第一个椭圆更大并超出其边界,此化合物的大小仍为100x100。

您也可以use a Paththen do this

答案 1 :(得分:0)

我认为这里有边界。或者,您可以绘制一个椭圆,然后再绘制较小的具有背景色的椭圆。