如何将 Xamarin.forms 中的浮动操作按钮与 PCL 项目表单代码共享一起使用?



我是Xamarin,Xamarin.Forms和C#平台的新手。

我正在对这些技术进行一些实验,现在我正在搜索如何在 Xamarin.Forms 中使用特定于平台的 UI 组件与 PCL 项目进行代码共享。

在网络上搜索,我发现了一些 FAB 按钮的实现(示例(,但这些实现已被弃用或放弃。

我知道可以将本机控件嵌入到Xamarin.Forms中,但是这种方法使用SAP项目...

我的问题是:有没有办法将 FAB 按钮(或其他特定于平台的 UI 控件(用于 PCL 项目的 Xamarin.Forms 解决方案中用于代码共享?如果是,其他平台的行为是什么?我希望 FAB 按钮不会出现在 iOS UI 上。

感谢您的帮助。

我不会在这里建议任何第三方库,但通常我们可以使用自定义渲染器来使用 PCL 中目标平台的本机控件。

对于 Android 平台的 FloatingActionButton,您可以尝试实现视图渲染器。

例如,在 PCL 中创建一个名为MyFloatButton的类:

public class MyFloatButton : View
{
}

然后在 android 项目中创建另一个名为MyFloatButtonRenderer的类,例如:

[assembly: ExportRenderer(typeof(MyFloatButton), typeof(MyFloatButtonRenderer))]
namespace NameSpace.Droid
{
public class MyFloatButtonRenderer : Xamarin.Forms.Platform.Android.ViewRenderer<MyFloatButton, FloatingActionButton>
{
private FloatingActionButton fab;
protected override void OnElementChanged(ElementChangedEventArgs<MyFloatButton> e)
{
base.OnElementChanged(e);
if (Control == null)
{
fab = new FloatingActionButton(Xamarin.Forms.Forms.Context);
fab.LayoutParameters = new LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);
fab.Clickable = true;
fab.SetImageDrawable(Resources.GetDrawable(Resource.Drawable.icon));
SetNativeControl(fab);
}
if (e.NewElement != null)
{
fab.Click += Fab_Click;
}
if (e.OldElement != null)
{
fab.Click -= Fab_Click;
}
}
private void Fab_Click(object sender, EventArgs e)
{
}
}
}

我希望 FAB 按钮不会出现在 iOS UI 上。

如果您只希望为 Android 平台显示此控件,则可以在页面的 PCL xaml 中编写代码,例如:

<OnPlatform x:TypeArguments="View">
<OnPlatform.Android>
<local:MyFloatButton WidthRequest="50" HeightRequest="50" HorizontalOptions="Center" />
</OnPlatform.Android>
<OnPlatform.iOS>
<!--use other view here-->
</OnPlatform.iOS>
</OnPlatform>

或者,您可以选中在代码隐藏中添加此控件,请查看此博客:将本机控件嵌入 Xamarin.Forms

最新更新