【发布时间】:2020-02-05 08:32:38
【问题描述】:
我最近一直在学习 C# MVVM,但显然我没有掌握一些关于扩展类的知识......
在下面的示例中,SkiaSharp 是一个 Xamarin 矢量图形包,我已经获得了一些矢量图标,我希望有一个可重用的类来在应用程序的各个点对它们进行缩放和着色
我想如果我将“SKCanvasView”子类化,那么我可以传入变量(图标、颜色)——当代码在相关视图中时一切正常,但我希望它在共享代码中,所以我像这样引用它
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:local="clr-namespace:Custom"
x:Class="NavigationIcons">
<local:RenderSVG StyleId="F9001A"
Grid.Row="0"
Grid.Column="1"
HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand"
ClassId="vector.svg"
PaintSurface="OnCanvasViewPaintSurface">
</local:RenderSVG>
它构建了,但随后它抱怨“PaintSurface”的方法不在视图代码隐藏文件中,如果它引用另一个类,我当然认为不需要它
我会假设"local:SVGRender" 意味着所有代码都将从该共享类运行,而不是从 XAML 视图后面的类文件运行,但似乎不是?
public class RenderSVG : SKCanvasView
{
void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
{
try
{
// rendering code is here
}
}
}
抛出的错误是“EventHandler”Custom.RenderSVG.OnCanvasViewPaintSurface“在类型“NavigationIcons”中找不到正确的签名,所以它甚至没有尝试查看我创建的派生类
【问题讨论】:
-
PaintSurface是一个事件,当您像上面所做的那样处理事件时,它基本上会创建一个事件处理程序,该事件处理程序将在该事件发生时处理该事件。所以基本上这就是你上面的代码似乎在做的事情,根据我对你的问题的理解,你不希望你想要的是在你分配一些东西时绘制你的图像。所以请给我们更多关于 RendeSvg 类的信息。 -
它是如何开始绘图的?您是否使用
ClassId属性为其分配一个值,如果该属性更改为是,您是否调用所需的方法来绘制此图像? -
您是否尝试使用
override覆盖事件/方法? -
OK 所有的道歉都不够清楚。当方法位于视图的代码中时,将调用 PaintSurface 事件。所以代码工作正常(这就是我没有包含它的原因)。但它“不存在”,因此当我在外部类(RenderSVG)中引用它时构建失败。我想知道 OnCanvasViewPaintSurface 方法的路径是否需要绝对路径?
标签: c# xamarin.forms