Xamarin.forms: [Улучшение] Добавлены элементы FlyoutItem.IsVisible, Tab.IsVisible, BaseShellItem.IsVisible.

Созданный на 13 февр. 2019  ·  26Комментарии  ·  Источник: xamarin/Xamarin.Forms

Резюме

Предоставьте прикрепленные свойства, чтобы пользователи могли более непосредственно определять, что отображается во всплывающем меню или на панели вкладок.

Будущие предложения API

Мы должны добавить параметры, чтобы, когда пользователи используют FlyoutDisplayOptions="AsMultipleItems" , они могли выбрать отображение родителя в качестве заголовка. С контролем расширения мы также можем добавить это как настройку.

API

```С#
FlyoutItem.IsVisible//Прикрепленное свойство BP
Tab.IsVisible//Прикрепленное свойство BP
BaseShellItem.IsVisible // БП (не прикрепляемое свойство)

## Examples BaseShellItem.IsVisible 

If you set BaseShellIitem IsVisible to false it won't show up in the Flyout or on any of the tabs

## Examples Tab.IsVisible

```xaml
<TabBar>
    <Tab Title="Tab 1">
          <ShellContent Title="Top Tab 1" />
          <ShellContent Title="Top Tab 2"  Tab.IsVisible="false"/>
          <ShellContent Title="Top Tab 3" />
    </Tab>
    <Tab Title="Tab 2" Tab.IsVisible="false">
    </Tab>
</TabBar>

Примеры FlyoutItem.IsVisible

Пользователи хотят, чтобы всплывающее окно не отображало ни одну из вкладок на экране.

<MenuItem title="item 1 "/>
<MenuItem title="item 2" />
<MenuItem title="item 3" />
<TabBar Shell.FlyoutBehavior="Flyout" FlyoutItem.IsVisible="False">
    <Tab>
    </Tab>
</TabBar>

Визуализирует 3 всплывающих элемента

  • Пункт 1
  • Пункт 2

- Пункт 3

<FlyoutItem title="item 1 " />
<FlyoutItem title="item 2" />
<ShellContent title="Content" FlyoutItem.IsVisible="False" />

Отображает 2 всплывающих элемента, даже если вы находитесь в элементе ShellContent

  • Пункт 1
  • Пункт 2

Предполагаемый вариант использования

Вариант использования, который я имею в виду, состоит в том, чтобы иметь элемент в меню гамбургеров, чтобы пользователь мог обновить приложение до Premium. После того, как пользователь обновил элемент, он больше не должен быть виден.
Родитель: #2415

shell in-progress high impact proposal-accepted enhancement ➕

Самый полезный комментарий

Можем ли мы получить обновленную информацию об этом? (очень, очень хочу!)

Все 26 Комментарий

Есть новости по этому поводу?

@PureWeen Я видел, как вы использовали это на саммите Xam Dev Summit, это в предварительной версии или в чем-то еще?

Другой предполагаемый вариант использования — это когда один набор функций (часто используемый) должен быть виден на нижней панели вкладок, а другой набор функций (настройки, восстановление покупок, справка и т. д.) должен быть доступен из гамбургер-меню. Если это уже возможно, пожалуйста, дайте мне знать.

Можем ли мы получить обновленную информацию об этом? (очень, очень хочу!)

удар

Очень нужно это

Есть новости по этому поводу?

Любое обновление? Нам это очень нужно.

Есть новости по этому поводу?

Shell практически бесполезна, если только вы не создаете очень маленькое приложение. Без этого мы не можем устанавливать разрешения или скрывать страницы, которые нам не нужны во всплывающем меню. Как это сейчас не приоритет?

Вы правы @brepetti
Мне интересно, если я что-то пропустил здесь ...

@родригохуарес @brepetti

Забавно то, что на XDS в прошлом году это обсуждалось как элемент, который скоро появится... До такой степени, что они его показали.

Я думаю, что это, вероятно, оказалось блокировщиком из-за того, как он обрабатывает стек навигации. Потому что я знаю, что пример, показанный на XDS, использовал в основном пользовательский/перестроенный стек навигации.

Мне удалось заставить его работать для верхних вкладок TabBar с помощью ручного обходного пути, создав элементы ShellContent вручную (добавление, удаление). В Xamarin.Forms 4.6 теперь он также работает для iOS (только что исправлено 1 день назад в 4.6).

Должно ли работать и для гамбургер-меню?

@malte1989 @malte1989 Да, мы говорим об элементе оболочки, также известном как нечто, что находится в визуальном дереве оболочки.

@ malte1989 malte1989 , не могли бы вы привести пример кода?

@ malte1989 malte1989 , не могли бы вы привести пример кода?

Конечно, завтра я опубликую код своего решения для панели вкладок.

@Jakar510

AppShell.xaml

<TabBar Route="tabBar">
        <Tab 
            x:Name="myTab" 
            Route="tab1"
            Icon="tab_icon1.png">
            <ShellContent 
                x:Name="shellStart"
                Route="route1A" 
                Title="title" 
                ContentTemplate="{DataTemplate view:Page1A}" />
        </Tab>
        <Tab 
            Route="tab2"
            Icon="tab_icon2.png">
            <ShellContent 
                Route="route2" 
                Title="title2" 
                ContentTemplate="{DataTemplate view:Page2}" />
        </Tab>
        </Tab>
        <Tab 
            Route="tab3"
            Icon="tab_icon3.png">
            <ShellContent 
                Route="route3" 
                Title="title3" 
                ContentTemplate="{DataTemplate view:Page3}" />
        </Tab>
    </TabBar>

AppShell.xaml.cs

public ShellContent shell0;
public ShellContent shell1;
public ShellContent shell2;
public ShellContent shell3;
public static Tab tabLocal;

конструктор

            tabLocal = myTab;
            shell0 = shellStart;
            shell1 = new ShellContent()
            {
                Content = new Page1B(),
                Title = "",
                Route = ""
            };
            shell2 = .... Page1C() ...
            shell3 = .... Page1D() ...
            ...

Переключение страницы 0 на 1

AppShell.tabLocal.Items.Add(shell1);
AppShell.tabLocal.Items.Remove(shell0);

Возможно, вам нужны эти два метода для управления вашей навигацией.

protected async override void OnNavigating(ShellNavigatingEventArgs args)
protected override void OnNavigated(ShellNavigatedEventArgs args)

Я надеюсь, это поможет вам. Пожалуйста, дайте мне примечание, если это работает для вас.

Я буду работать над этим для 4.7/4.8

Я обновил спецификацию, если кто-то хочет прокомментировать

@PureWeen Нет, но я надеюсь, что когда вы начнете работать над этим, вы опубликуете стрим на Twitch, чтобы мы могли обязательно настроиться 👍

Я буду работать над этим для 4.7/4.8
Я обновил спецификацию, если кто-то хочет прокомментировать

Извините за глупый вопрос: где я могу найти и прочитать характеристики?

@ncarandini Я только что обновил описание этой проблемы со спецификацией

Да, спасибо!

Я считаю, что нашел обходной путь для этого (на данный момент).
Сделай это:

  • дайте вашему flyoutitem или элементам имя, например
    <FlyoutItem Title="Self Review" x:Name="fiSelf"> <FlyoutItem.Icon> <FontImageSource FontFamily="{StaticResource sapcIconFont}" Glyph="{StaticResource IconUser}" Color="{StaticResource IconColor}"/> </FlyoutItem.Icon> <ShellContent> <viewsAssess:StartSelfPage /> </ShellContent> </FlyoutItem>

  • переопределить OnBindingContextChanged в AppShell.cs и добавить код для проверки условия, чтобы скрыть и показать, а затем вызвать метод Clear для свойства Items элемента flyitem
    protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); if(App.IsIntern) { fiAssess.Items.Clear(); fiPeer.Items.Clear(); fiSelf.Items.Clear(); fiVerifications.Items.Clear(); } }

работает на меня

закрыто #10980

Это по-прежнему ведет себя странно: всякий раз, когда мы динамически изменяем свойство IsVisible в BaseShellItem, время от времени стиль ShellContent будет теряться. Нажатие страницы поверх содержимого оболочки, а затем ее извлечение, кажется, исправляет это.

Примером может быть наличие 2 страниц, содержимое оболочки X имеет кнопку, которая изменяет логическое свойство, которое привязано к свойству IsVisible содержимого оболочки Y.

@GeorgeVelikov , вы можете зарегистрировать проблему?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги