如何在Xamarin中隐藏导航工具栏图标?

Mau*_*hah 2 xamarin.ios xamarin.android xamarin xamarin.forms

我想在xamarin中隐藏导航栏按钮。我该如何使用绑定。工具栏项没有“ IsVisible”属性。

以下是我的XAML代码

导航栏按钮的XAML代码

请帮助我解决此问题。

teq*_*mer 8

我建议建立一个可绑定的ToolBoxItem。这样,您可以通过视图模型属性控制可见性。

一个实现可能看起来像这样:

public class BindableToolbarItem : ToolbarItem
{
    public static readonly BindableProperty IsVisibleProperty = BindableProperty.Create(nameof(IsVisible), typeof(bool), typeof(BindableToolbarItem), true, BindingMode.TwoWay, propertyChanged: OnIsVisibleChanged);

    public bool IsVisible
    {
        get => (bool)GetValue(IsVisibleProperty);
        set => SetValue(IsVisibleProperty, value);
    }

    private static void OnIsVisibleChanged(BindableObject bindable, object oldvalue, object newvalue)
    {
        var item = bindable as BindableToolbarItem;

        if (item == null || item.Parent == null)
            return;

        var toolbarItems = ((ContentPage)item.Parent).ToolbarItems;

        if ((bool)newvalue && !toolbarItems.Contains(item))
        {
            Device.BeginInvokeOnMainThread(() => { toolbarItems.Add(item); });
        }
        else if (!(bool)newvalue && toolbarItems.Contains(item))
        {
            Device.BeginInvokeOnMainThread(() => { toolbarItems.Remove(item); });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常好的解决方案。但是,请记住,默认可见性为“True”,这意味着您可以使用 IsVisible="{Binding ShowToolbarItem}" 等绑定将其从可见切换到隐藏。使用这种方法,您不能从页面生命周期的一开始就隐藏工具栏项目(至少不会出现一些闪烁)。 (2认同)
  • 知道为什么当我尝试这个时我的 item.Parent 为空吗?BindableToolBarItem 嵌套在 <ContentPage.ToolBarItems> 中 (2认同)

Ger*_*uis 5

正如你发现自己没有IsVisible。因此,如果您仍然想要它,则必须自己实现类似的功能。

另一种方法是在页面的代码隐藏中处理它,并在需要时删除或添加工具栏项。

添加和删​​除很简单,只需在ToolbarItems集合中添加和删​​除项目:ToolbarItems.RemoveAt(0);例如将删除第一个工具栏项目。