我正在尝试从指向图像的 URL 获取可绘制对象。但问题是,在 android 中你不应该在主线程上执行网络任务。因此,我使用了 async/await 块,但错误仍然不断发生。这是代码:
page.Appearing += async(sender, ev3) =>
{
if ( GetToolbar == null ) return;
GetToolbar.Subtitle = viewModel?.SubTitle;
if ( viewModel == null ) return;
if ( viewModel.AvatarUrl.Contains("?") && !viewModel.AvatarUrl.Contains("gravatar") )
viewModel.AvatarUrl = viewModel.AvatarUrl
.Substring(0, viewModel.AvatarUrl.IndexOf("?", StringComparison.Ordinal));
//var stream = Context.ContentResolver.OpenInputStream(Android.Net.Uri.Parse(viewModel.AvatarUrl));
await SetLogo(viewModel);
}
private async Task SetLogo(PublicRepositoryPageViewModel viewModel)
{
var url = new URL(viewModel.AvatarUrl);
var connection = url.OpenConnection();
var stream = connection.InputStream;
var logo = await Drawable.CreateFromStreamAsync(stream, viewModel.Title + "_avatar");
GetToolbar.Logo = logo;
} …Run Code Online (Sandbox Code Playgroud) 我为Label创建了一个自定义渲染器.现在我想用它的焦点状态进行操作,所以我创建了可绑定的属性和事件.当我从自定义渲染器更改可绑定属性时,它工作正常:Element.IsFocused = true;
但是当我从视图模型更改它时,它会影响XAML视图,但由于某些原因,不会为此属性调用setter.这是代码:
在自定义类中:
public new static readonly BindableProperty IsFocusedProperty =
BindableProperty.Create(nameof(IsFocused), typeof(bool), typeof(FloatingEntry), false);
public new bool IsFocused
{
get { return (bool)GetValue(IsFocusedProperty); }
set
{
SetValue(IsFocusedProperty, value);
if (value) Focus();
}
}
Run Code Online (Sandbox Code Playgroud)
在XAML中:
IsFocused="{Binding PasswordEntryIsFocused}"
Run Code Online (Sandbox Code Playgroud)
在视图模型中:
private bool _passwordEntryIsFocused;
public bool PasswordEntryIsFocused
{
get { return _passwordEntryIsFocused; }
set
{
SetProperty(ref _passwordEntryIsFocused, value);
}
}
Run Code Online (Sandbox Code Playgroud)
在View Model中的某种方法: PasswordEntryIsFocused = true;
这不是new关键字,我尝试没有它.并且绑定工作,因为我试图将它与可视属性绑定,IsVisible就像它应该工作一样,但是setter总是只从自定义渲染器调用.
我想我可能会在可绑定的属性工作环境中遗漏一些东西.
我决定加下划线Effect的Label,和做一步一步在这里,但由于某些原因,每当我有Label这个Effect,在Android和iOS我的应用程序崩溃.使用诊断日志,仍然没有消息,可以说我在哪里出问题.其实,它只是开始使我View有这个Label,在那之后我的应用程序变得不活跃,手机打开它的主屏幕,并在VS,调试立即停止.在Android设备日志中,我发现了这个:
代码类似于上面链接中的代码.我已经试图找到一些原因,实际上,我没有.我试着用硬核名字.此外,没有达到类或平台特定类中的断点.如果我,例如,注释ResolutionGroupName属性,该应用程序将工作并将Label显示,但确定没有下划线.
UPDATE
对不起,也许带有错误的iOS屏幕截图与当前问题无关.但我有一个可能是:
custom-renderer xamarin.ios xamarin.android xamarin xamarin.forms