微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Xamarin Forms Shell中打开左侧菜单时发生的事件

如何解决在Xamarin Forms Shell中打开左侧菜单时发生的事件

我正在使用xamarin表单外壳。我有1张图片和1个标签来分配用户名称和个人资料图片。 我希望每次菜单打开时(按按钮或向右拖动)再次更新该值,但是我找不到与之相关的任何事件。有人请严重帮助我

解决方法

当您按下外壳汉堡包图标时,可以使用自定义渲染器获取事件。

[assembly: ExportRenderer(typeof(AppShell),typeof(ShellCustomRenderer))]

namespace ShellDemo.Droid
{
public class ShellCustomRenderer : ShellRenderer
{
    public ShellCustomRenderer(Context context) : base(context)
    {

    }

    protected override IShellToolbarAppearanceTracker CreateToolbarAppearanceTracker()
    {
        return new ToolbarAppearance();
    }
}

public class ToolbarAppearance : IShellToolbarAppearanceTracker
{
    public void Dispose()
    {

    }

    public void ResetAppearance(Android.Support.V7.Widget.Toolbar toolbar,IShellToolbarTracker toolbarTracker)
    {
        toolbar.NavigationClick += Toolbar_NavigationClick1;
    }

    private void Toolbar_NavigationClick1(object sender,Android.Support.V7.Widget.Toolbar.NavigationClickEventArgs e)
    {
       //this event would be fired when the hamburger icon clicked.
    }

    private void Toolbar_NavigationClick(object sender,Android.Support.V7.Widget.Toolbar.NavigationClickEventArgs e)
    {
        
    }

    public void SetAppearance(Android.Support.V7.Widget.Toolbar toolbar,IShellToolbarTracker toolbarTracker,ShellAppearance appearance)
    {
      
    }
}

}
,

由于没有OnFlyoutOpened OnFlyoutClosed之类的事件,因此不会发生,因此您可以监听Shell PropertyChanged事件,如果属性为FlyoutIsPresented,则执行代码:

public AppShell()
{
    InitializeComponent();
    PropertyChanged += Shell_PropertyChanged;
}

private void Shell_PropertyChanged(object sender,PropertyChangedEventArgs e)
{
    if (e.PropertyName.Equals("FlyoutIsPresented"))
        if (FlyoutIsPresented)
            OnFlyoutOpened();      //you will execute your code here
        else
            OnFlyoutClosed();
}

根据您的要求,您将定义OnFlyoutOpened()OnFlyoutClosed()方法。

感谢discussion中的@PureWeen指南。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。