C# 如何在椭圆的内部绘制基本体?

C# 如何在椭圆的内部绘制基本体?,c#,wpf,xaml,ellipse,C#,Wpf,Xaml,Ellipse,我有一个椭圆 如图所示。我需要在给定椭圆的内部绘制一个基本体,类似于图中所示 XAML: <Ellipse Width="300" Height="200" Fill="Yellow"/> 图片: 更新: 正如所见,我有用户控制。基本上,它的底部是一个椭圆。还有一些原语必须位于给定的椭圆内。我还需要通过绑定分别隐藏/公开这些原语 主要问题是:试着将UC放入主窗口,看看会发生什么。基本体将离开它们的坐标。此外

我有一个椭圆 如图所示。我需要在给定椭圆的内部绘制一个基本体,类似于图中所示

XAML:

<Ellipse
            Width="300"
            Height="200"
            Fill="Yellow"/>

图片:

更新: 正如所见,我有用户控制。基本上,它的底部是一个椭圆。还有一些原语必须位于给定的椭圆内。我还需要通过绑定分别隐藏/公开这些原语

主要问题是:试着将UC放入主窗口,看看会发生什么。基本体将离开它们的坐标。此外,如果我增大/减小UC本身的大小,它将无法以适当的方式进行缩放

<UserControl
    x:Class="Painting_test.UC_Ellipse"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:Painting_test"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    d:DesignHeight="300"
    d:DesignWidth="300"
    mc:Ignorable="d">
    <Grid>


        <Ellipse
            Width="200"
            Height="200"
            Fill="Yellow"
            Stroke="Black" />
        <Path x:Name="Bridge"
            Width="34.5"
            Height="69.5"
            Margin="115.5,127,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Data="M149,127 L115.5,195.5"
            Fill=" Yellow"
            Stretch="Fill"
            Stroke="Black" />
        <Path x:Name="Nose"
            Width="38.5"
            Height="1.008"
            Margin="115.5,195.5,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Data="M115.5,196.492 L153,196.5"
            Fill=" Yellow"
            Stretch="Fill"
            Stroke="Black" />
        <Rectangle x:Name="SquareEye"
            Width="24"
            Height="24"
            Margin="103.984,118,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Fill="Yellow"
            Stroke="Black" />
        <Ellipse x:Name="CircleEye"
            Width="24"
            Height="24"
            Margin="169,118,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Fill="Yellow"
            Stroke="Black" />

    </Grid>
</UserControl>

您需要使用
Canvas
而不是
Grid
作为容器,并且需要使用Canvas Left/Top而不是
Margin
,如下所示:

<Viewbox 
        Stretch="Uniform" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch">
    <Canvas Width="200" Height="200">
        <Ellipse
            Canvas.Left="0"
            Canvas.Top="0"
            Width="200"
            Height="200"
            Fill="Yellow"
            Stroke="Black" />
        <Path x:Name="Bridge"
              Width="34.5"
              Height="69.5"
              Canvas.Left="65.5"
              Canvas.Top="63"
              HorizontalAlignment="Left"
              VerticalAlignment="Top"
              Data="M149,127 L115.5,195.5"
              Fill=" Yellow"
              Stretch="Fill"
              Stroke="Black" />
        <Path x:Name="Nose"
              Width="38.5"
              Height="1.008"
              Canvas.Left="65.5"
              Canvas.Top="145.5"
              HorizontalAlignment="Left"
              VerticalAlignment="Top"
              Data="M115.5,196.492 L153,196.5"
              Fill=" Yellow"
              Stretch="Fill"
              Stroke="Black" />
        <Rectangle x:Name="SquareEye"
                   Width="24"
                   Height="24"
                   Canvas.Left="53.984"
                   Canvas.Top="68"
                   HorizontalAlignment="Left"
                   VerticalAlignment="Top"
                   Fill="Yellow"
                   Stroke="Black" />
        <Ellipse x:Name="CircleEye"
                 Width="24"
                 Height="24"
                 Canvas.Left="119"
                 Canvas.Top="68"
                 HorizontalAlignment="Left"
                 VerticalAlignment="Top"
                 Fill="Yellow"
                 Stroke="Black" />
    </Canvas>
</Viewbox>

之前:

之后:


要么在XAML中的椭圆后添加它,以便在其上绘制,要么用画笔填充椭圆。你好,克劳斯,我记得你的自行车。))谢谢你的快速回复,我会试试。如果我使用画笔,我将无法控制椭圆内的原语。会吗?例如,控件的可见性属性。能否请您在问题中添加此附加要求,并举例说明您希望实现的目标。您好Klaus,我做了一些附加评论。请在上面找到它们。哇!它起作用了!)是否有一种方法可以在不损失已实现属性的情况下将桥和鼻、方眼和圆眼进行分组?例如,为了同时隐藏两只眼睛。当然,将它们粘在自己的子画布中,并打开和关闭子画布的可见性。就如何正确控制它而言,我不太熟悉此资源(非常奇怪的引擎)。刚刚添加了一个问题,请将其作为第二个答案或其他任何内容查找。如果您希望它自动调整大小,请将其粘贴在ViewBox中(我已为此编辑了代码)。Dean,您希望说标准椭圆(来自工具箱)也位于ViewBox容器中。为什么不允许在我们的改造后添加第二个UC。