C# 如何在不使用笔划属性的情况下绘制椭圆的轮廓?

C# 如何在不使用笔划属性的情况下绘制椭圆的轮廓?,c#,wpf,C#,Wpf,我真正想要的是一种在WPF形状(如椭圆)上具有负笔划厚度值的方法,以便斯托克轮廓朝着形状的左侧和顶部向外绘制,而不是在形状的内部,当我使笔划的厚度过厚时,在我的文本上过度书写。。。我希望椭圆的半径保持不变,但是笔划向外延伸,增加了深度,形状的左侧顶部位置保持连续,内部填充保持相同的大小,并且随着大小的增加不会被笔划覆盖 我试过DropShadowEffect,但它太模糊了,不够清晰…看起来有点凌乱。。。真的,我只是想要一条围绕形状外部的实线 正如你们从上图中看到的,我试图用下面的代码在两个椭圆

我真正想要的是一种在WPF形状(如椭圆)上具有负笔划厚度值的方法,以便斯托克轮廓朝着形状的左侧和顶部向外绘制,而不是在形状的内部,当我使笔划的厚度过厚时,在我的文本上过度书写。。。我希望椭圆的半径保持不变,但是笔划向外延伸,增加了深度,形状的左侧顶部位置保持连续,内部填充保持相同的大小,并且随着大小的增加不会被笔划覆盖

我试过DropShadowEffect,但它太模糊了,不够清晰…看起来有点凌乱。。。真的,我只是想要一条围绕形状外部的实线

正如你们从上图中看到的,我试图用下面的代码在两个椭圆周围加上阴影。问题是,我希望它是一个围绕外部的纯色,就像另一个不同颜色椭圆的缩放变换

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>           

我觉得有点像边界。或者,您可以绘制一个椭圆,然后再绘制一个具有背景色的较小椭圆。

您可以在网格内使用两个椭圆,彼此重叠,如下所示:

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

即使第一个椭圆更大,并在其边界外渲染,该化合物的大小仍为100x100


你也可以,这是一个有趣的想法。。但我不想弄乱数字pi。。。也许有一种方法可以通过缩放变换来实现?边界是可行的,但它不是一个圆…这是一个有趣的想法。。如果我在间距计算中使用较大的椭圆半径。。。啊。。但等一下,你有一个保证金=-10。。。这可能行得通,如果比扬的答案满足了你的需要,你应该和蔼可亲,并将其标记为已回答。我认为比扬的答案是最好的,但我保留它,以防微软决定在未来某个时候添加负面StrokeThickness。。。
<Grid Width="100" Height="100">
    <Ellipse Fill="Black"  Margin="-10"/>
    <Ellipse Fill="Red" />
</Grid>