假设我有一个非常简单的xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:drawable="clr-namespace:eden.Pages"
x:Class="eden.Pages.Modeler">
<ContentPage.Resources>
<drawable:GraphicsDrawable x:Key="drawable" />
</ContentPage.Resources>
<VerticalStackLayout>
<GraphicsView x:Name="modelerArea"
Drawable="{StaticResource drawable}">
<FlyoutBase.ContextFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="Add rectangle"
Clicked="AddRectangle"> <!-- HERE I WANT TO ADD RECTANGLE ON CLICK -->
</MenuFlyoutItem>
</MenuFlyout>
</FlyoutBase.ContextFlyout>
</GraphicsView>
</VerticalStackLayout>
</ContentPage>
然后是非常简单的xaml.cs
public partial class Modeler : ContentPage
{
public Modeler()
{
InitializeComponent();
}
private void AddRectangle(object sender, EventArgs e)
{
// for example
// var mySpecialRectangle = new specialRectangle();
// canvas.Add(mySpecialRectangle);
}
}
public class GraphicsDrawable : IDrawable
{
public void Draw(ICanvas canvas, RectF dirtyRect)
{
canvas.StrokeColor = Colors.Red;
canvas.StrokeSize = 6;
canvas.DrawLine(10, 10, 90, 100);
}
}
}
如何将该对象添加到canvas/graphicsview?
2条答案
按热度按时间q7solyqu1#
矩形是在graphicsview中绘制的,所以你可以创建一个继承自
IDrawable
的类,然后将其设置为GraphicsView
示例的Drawable
属性,最后你可以将GraphicsView
示例添加到布局中,例如:在页面中.xaml:
在页面.cs:
单击按钮时将绘制矩形。
7d7tgy0s2#
你读过Draw graphical objects吗?
在
ICanvas
方法中,您不需要“添加对象”,而是进行“绘制”调用。modelerArea
在您的xaml
中是canvas
,因此它将是以下各项的变体:警告:我自己从来没有这样做过;我是根据链接的文档来做的。
这意味着如果你想为以后“记住”一些“对象”,你必须自己去做。定义你自己的类来描述要绘制的对象。维护那些对象“模型”的列表,这样你就可以在以后绘制它们。