c# - 如何在 Xamarin Forms 上触发浮动操作按钮 OnClicked EventHandler
问题描述
我正在使用 NuGet 包https://github.com/jamesmontemagno/FloatingActionButton-for-Xamarin.Android来实现浮动操作按钮。我已经添加了它,但我无法让 clicked 事件工作。
MyPage.xaml:
<fab:FloatingActionButtonView ImageName="settings_24.png"
ColorNormal="{StaticResource PrimaryColor}"
ColorPressed="{StaticResource PrimaryDarkColor}"
ColorRipple="{StaticResource PrimaryDarkColor}"
x:Name="FABaddTx"
AbsoluteLayout.LayoutFlags="PositionProportional"
AbsoluteLayout.LayoutBounds="1, 1, AutoSize, AutoSize"
Clicked="FAB_Clicked"/>
MyPage.xaml.cs:
private void FAB_Clicked(object sender, EventArgs e)
{
var page = new AddTransactionPage();
Navigation.PushAsync(page);
}
我发现这FloatingActionButtonView.Clicked
是一个属性而不是一个事件,但是它是如何工作的呢?没有我可以使用的ItemTapped
或ItemSelected
事件。
我已经查看了 GitHub 存储库中提供的示例代码,遗憾的是只有 Xamarin.Android 代码,而我需要 Xamarin.Forms。
解决方案
根据源存储库中的此 Xamarin.Forms 示例,它是一个操作委托属性。
/// <summary>
/// Action to call when clicked
/// </summary>
public Action<object, EventArgs> Clicked { get; set; }
您可以在 Page 的构造函数中设置委托。
但是,鉴于它不是一个实际的事件处理程序,而只是一个 void 方法,async void
如果您想安全地执行异步操作,则不建议将其设为方法。
相反,创建一个事件和异步事件处理程序,以便可以等待异步操作
MyPage.xaml.cs:
public MyPage() {
//Subscribing to our event here
FabClicked += OnFabClicked;
//FABaddT is already defined in the XAML so just setting the delegate here
FABaddT.Clicked = (sender, args) => {
//Raising the event here and passing sender and event arguments on
FabClicked(sender, args);
};
}
private event EventHandler FabClicked = delegate { };
private async void OnFabClicked(object sender, EventArgs args) {
var page = new AddTransactionPage();
await Navigation.PushAsync(page);
}
推荐阅读
- python - 如何在 Django 中列出客户的国家/地区?
- twitter-bootstrap - Boostrap table change icon by fontAwesome by icon bootstrap
- javascript - 如何在 JS xhttp.open() 中正确提供文件路径?
- javascript - Nodejs无法读取未定义的属性“文件名”
- bash - 为什么这个 bash 脚本出现时看不到 slurm 日志文件?
- c# - Azure Key Vault - 是否有用于此的 .NET Core API?
- python - 自定义 pandas-profiling 中的图(更改相关热图中的颜色/颜色条/..)
- windows - 在ubuntu运行的tomcat9上,通过jenkins管道在同一根路径下部署多个war文件
- headless - 如何正确编译 ParaView 以进行无头屏幕外渲染?
- java - 如何将 GIF 图像保存到图库?