我真正想要的是在WPF形状(例如椭圆形)上具有负笔触厚度值的方法,以便笔迹轮廓朝着LEFT和TOP of Shape(而不是形状内部)向外绘画,从而覆盖我的笔迹。当我使笔触的感觉太粗时输入文本...我希望椭圆的半径保持恒定,但是笔触随着思考的增加而向外增长,并且形状的左,顶位置应与内部保持一致填充保持相同的大小,并且不会随着大小的增加而被中风遮盖。
我尝试了DropShadowEffect,但是它太模糊了,定义不够好...看起来有点凌乱...真的,我只想在形状的外部绕实线...
从上面的图片可以看到,我尝试使用下面的代码在两个椭圆上放置阴影。问题是我希望它是外部的纯色,就像另一种不同颜色的椭圆的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的较大椭圆放置在另一个椭圆之后...这就是现在的样子。
解决方案在这里某处:
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);
答案 0 :(得分:2)
您可以像这样在相互重叠的网格内使用双椭圆形:
<Grid Width="100" Height="100">
<Ellipse Fill="Black" Margin="-10"/>
<Ellipse Fill="Red" />
</Grid>
即使第一个椭圆更大并超出其边界,此化合物的大小仍为100x100。
答案 1 :(得分:0)
我认为这里有边界。或者,您可以绘制一个椭圆,然后再绘制较小的具有背景色的椭圆。