我尝试为 Xamarin.Forms 创建一个自定义条目控件,其中包含:
对于 SVG图标,我使用基于AlexPshul解决方案的控件,该控件使用 SkiaSharp 将svg转换为图标。源代码控件看起来像this。
此控件使用了BindableProperty
:
public static readonly BindableProperty ResourceIdProperty = BindableProperty.Create(
nameof(ResourceId), typeof(string), typeof(SvgIcon), default(string), propertyChanged: RedrawCanvas);
public string ResourceId
{
get => (string)GetValue(ResourceIdProperty);
set => SetValue(ResourceIdProperty, value);
}
根据Alex Dunn的解决方案,我还使用了自定义条目允许删除边框:
public class BorderlessEntry : Entry
{
public BorderlessEntry()
{
}
}
然后控件在iOS和Android上使用自定义渲染器。
我想创建这样的自定义控件:
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="CustomEntries.CustomEntry"
xmlns:cust="clr-namespace:CustomEntries">
<StackLayout Orientation="Horizontal" BackgroundColor="White">
<cust:SvgIcon x:Name="embeddedSvgIcon" WidthRequest="20" HeightRequest="20"
HorizontalOptions="Center" VerticalOptions="Center"/>
<cust:BorderlessEntry x:Name="embeddedBorderlessEntry" Placeholder="Name or surname" HorizontalOptions="FillAndExpand" />
<cust:SvgIcon ResourceId="CustomEntry.times_circle.svg" WidthRequest="20" HeightRequest="20"
HorizontalOptions="Center" VerticalOptions="Center" />
</StackLayout>
</ContentView>
我可以在页面上“复制”该控件,并为每个控件指定属性,效果很好:
但是我想通过引用一个通用控件并指定BindableProperties
来正确实现它。
而且我看不到如何将该公共控件的BindableProperties
传输到“子级”控件(SvgIcon,BorderlessControl):
有可能吗?有什么更好的方法来实现这一目标?