Как скрыть значок панели инструментов навигации в xamarin? - PullRequest
0 голосов
/ 31 мая 2018

Я хочу скрыть кнопку панели навигации в xamarin.Как я могу сделать это с помощью привязки.Элемент панели инструментов не имеет свойства "IsVisible" .

Ниже приведен мой код xaml

Xaml code of navigation bar button

пожалуйстапомогите разобраться с этим вопросом.

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Я бы предложил создать привязываемый 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); });
        }
    }
}
0 голосов
/ 30 июля 2019

Ну, нам нужно свойство IsVisible для внешнего интерфейса, так как у xamarin его нет, вы можете использовать Device.RuntimePlatform, чтобы в реальном времени проверять, на каком устройстве работает приложение.Поскольку мой код находится в .cs файла XAML, мы можем использовать xaml .cs для вставки элементов на экран. Я ставлю if (), чтобы выполнить логику и проверить, находится ли мое устройство на какой платформе, потому что я не хочуэто отобразить в UWP панель инструментов.Код находится в .cs файла XAML:

public kingTest()
{
InitializeComponent();
if((Device.RuntimePlatform == "Android")||(Device.RuntimePlatform == "iOS"))
{
ToolbarItem toolbar = new ToolbarItem();
toolbar.IconImageSource = "ic_ToolBar.png";
this.ToolbarItems.Add(toolbar);
}

        };
0 голосов
/ 31 мая 2018

Как вы обнаружили себя, нет IsVisible.Так что вам придется реализовать такую ​​функциональность самостоятельно, если вы все еще хотите ее.

Другой способ - использовать ее в коде страниц и, при необходимости, удалять или добавлять элемент панели инструментов.

Добавление и удаление - это просто, просто добавьте и удалите элементы в коллекцию ToolbarItems: например, ToolbarItems.RemoveAt(0); удалит первый элемент панели инструментов.

...