我一直在使用代码布局here为Xamarin Forms项目创建SVG容器。它运作良好,我将其重新配置为从远程URL读取图像。
ResourceId
来自以上来源:
public static readonly BindableProperty SvgUriProperty = BindableProperty.Create(
"ResourceId",
typeof(string),
typeof(SvgUriContainer),
default(string),
propertyChanged: RedrawCanvas);
public string ResourceId
{
get => (string)GetValue(SvgUriProperty);
set => SetValue(SvgUriProperty, value);
}
但是我似乎无法在运行时在XAML中绑定该URL:
<control:SvgUriContainer
Grid.Row="0"
Grid.RowSpan="4"
Grid.Column="0"
ResourceId="{Binding StampUri}"
[...]
/>
该Binding返回一个字符串,其余的绑定工作正常。任何以这种方式进行绑定的尝试都会导致生成错误:
No property, bindable property, or event found for 'ResourceId', or mismatching type between value and property.
无论我在容器逻辑中使用BindableProperty
做什么,错误都是相同的,并且在XAML中。我在XAML中语法是否错误?是因为Binding
在构建时是BindingExtension
(不是字符串)吗?
注意:如果我将绑定替换为字符串/ URL,则一切正常。
注意:如果我将ResourceId
的类型设置为object
,我可以解决构建错误,但是字符串不能解析。
答案 0 :(得分:1)
您能否尝试将您的bindableProperty修改为document中所述的标准格式:
public static readonly BindableProperty SvgUriProperty = BindableProperty.Create(
"SvgUri",
typeof(string),
typeof(EventToCommandBehavior),
"test",
propertyChanged: RedrawCanvas);
public string SvgUri
{
get => (string)GetValue(SvgUriProperty);
set => SetValue(SvgUriProperty, value);
}
Xamarin需要属性命名约定。