c# - 使 MarkupExtension 与热重载 (Xamarin) 一起工作
问题描述
标题说得最多。我有一个自定义 MarkupExtension,它从字体中获取具有提供名称的图标并将其作为 FontImageSource 返回。该扩展可以在任何可以使用 ImageSource 的地方使用。扩展本身工作得很好。唯一的问题是当我使用热重载时,在我的页面上做一些更改并通过保存更改来重新加载视图,所有使用我的扩展的控件(例如图像)都是空白的。
有什么方法可以让我的 MarkupExtension 与 Hot Reload 一起工作?
示例代码:
[ContentProperty(nameof(IconName))]
public class FontImageExtension : IMarkupExtension<ImageSource>
{
private readonly IconFontService iconFontService;
public string IconName { get; set; }
public FontImageExtension()
{
iconFontService = GetService();
}
public ImageSource ProvideValue(IServiceProvider serviceProvider)
{
if (string.IsNullOrEmpty(IconName))
return null;
string glyphCode = iconFontService.GetGlyphCode(IconName);
if (string.IsNullOrEmpty(glyphCode))
return null;
return new FontImageSource()
{
FontFamily = iconFontService.GetFontLocation(),
Glyph = glyphCode,
};
}
object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
{
// Converting back is not needed
return null;
}
}
解决方案
哦,哇,我是有史以来最愚蠢的人。该函数IMarkupExtension.ProvideValue
不是为了提供将 ImageSource 转换回任何内容的方法(不知道为什么我认为它会这样做)。这似乎是在热重载时调用的函数。
因此,答案就像更改IMarkupExtension.ProvideValue
为以下内容一样简单:
object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
{
return ProvideValue(serviceProvider);
}
推荐阅读
- django - 在 Django ORM 中,通过组上的注释过滤对象
- django - 如何在 Django 中使用 html 按钮删除上传的图像?
- text-to-speech - Text To Speech 强制英语字母在某些单词上发音
- visual-studio-code - VsCode如何将webview添加到活动栏
- python - Pyspark 创建字符串类型的测试数据
- reactjs - 如何将模拟事件传递给 React.cloneElement() 方法返回的反应元素
- postgresql - 使用连接中的子查询简化聚合查询
- wcf - 在 .Net Core 2.2 Web API 中添加 WCF 参考失败
- android - 无法在 PermissionHandler 中禁用相机权限
- forms - /?#/ 在带有 Vue-router 的 Vue 中是什么意思?