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