Xamarin.forms: [Amélioration] Ajouter FlyoutItem.IsVisible, Tab.IsVisible, BaseShellItem.IsVisible

Créé le 13 févr. 2019  ·  26Commentaires  ·  Source: xamarin/Xamarin.Forms

Résumé

Fournissez des propriétés jointes afin que les utilisateurs puissent définir plus directement si quelque chose est visible dans le Flyout ou dans la TabBar.

Futures suggestions d'API

Nous devrions ajouter des options pour que les utilisateurs utilisent FlyoutDisplayOptions="AsMultipleItems" afin qu'ils puissent choisir d'afficher le parent en tant qu'en-tête. Avec le contrôle d'expansion, nous pourrions également ajouter cela en tant que paramètre.

API

```C#
FlyoutItem.IsVisible //Propriété jointe BP
Tab.IsVisible //Propriété jointe BP
BaseShellItem.IsVisible // BP (propriété non attachée)

## 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>

Exemples FlyoutItem.IsVisible

Les utilisateurs veulent un Flyout qui ne reflète aucun des onglets à l'écran.

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

Rend 3 éléments déroulants

  • Objet 1
  • Point 2

- Point 3

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

Rend 2 éléments Flyout même si vous êtes sur l'élément ShellContent

  • Objet 1
  • Point 2

Cas d'utilisation prévu

Le cas d'utilisation que j'ai en tête est d'avoir un élément dans le menu Hamburger pour que l'utilisateur mette à niveau l'application vers Premium. Une fois que l'utilisateur a mis à jour l'élément, il ne devrait plus être visible.
Parent : #2415

shell in-progress high impact proposal-accepted enhancement ➕

Commentaire le plus utile

Pourrions-nous obtenir une mise à jour à ce sujet ? (vraiment, vraiment envie de ça !)

Tous les 26 commentaires

Une mise à jour pour ceci?

@PureWeen Je vous ai vu l'utiliser au Xam Dev Summit, est-ce dans un pré ou quoi que ce soit encore ?

Un autre cas d'utilisation prévu est celui où un ensemble de fonctionnalités (fréquemment utilisées) doit être visible dans la barre d'onglets inférieure et un autre ensemble de fonctionnalités (paramètres, restauration des achats, aide, à propos, etc.) doit être accessible à partir du menu hamburger. Si c'est déjà possible, merci de me le faire savoir.

Pourrions-nous obtenir une mise à jour à ce sujet ? (vraiment, vraiment envie de ça !)

cogner

Vraiment besoin de ça

Une mise à jour pour ceci?

Toute mise à jour? Nous en avons vraiment besoin.

Une mise à jour pour ceci?

Shell est à peu près inutile, semble-t-il, à moins que vous ne construisiez une très petite application. Sans cela, nous ne pouvons pas définir d'autorisations ou masquer les pages que nous ne voulons pas sur le flyout. Comment n'est-ce pas une priorité en ce moment ?

Tu as raison @brepetti
Je me demande s'il ne me manque pas quelque chose ici...

@rodrigojuarez @brepetti

La partie amusante est à XDS l'année dernière, il a été discuté comme un élément qui allait bientôt être... À un point où ils l'ont montré.

Je pense que cela a probablement fini par être un bloqueur en raison de la façon dont il gère la pile de navigation. Parce que je sais que l'exemple montré sur XDS utilisait une pile de navigation principalement personnalisée / reconstruite.

J'ai réussi à le faire fonctionner pour TabBar Top Tabs avec une solution de contournement manuelle en créant manuellement les éléments ShellContent (ajout, suppression). Dans Xamarin.Forms 4.6, il fonctionne désormais également pour iOS (juste corrigé il y a 1 jour dans 4.6).

Cela devrait-il également fonctionner pour Hamburger Menu ?

@ malte1989 Oui, nous parlons d'un élément du shell, c'est-à-dire de quelque chose qui se trouve dans l'arborescence visuelle du shell.

@ malte1989 pourriez-vous s'il vous plaît fournir un exemple de code ?

@ malte1989 pourriez-vous s'il vous plaît fournir un exemple de code ?

Bien sûr, je publierai le code de ma solution de barre d'onglets demain.

@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;

constructeur

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

Commutation des pages 0 à 1

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

Peut-être avez-vous besoin de ces deux méthodes pour gérer votre navigation

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

J'espère que ceci vous aide. S'il vous plaît laissez-moi une note si cela fonctionne pour vous.

Je vais travailler dessus pour 4.7/4.8

J'ai mis à jour la spécification si quelqu'un veut commenter

@PureWeen Non, mais j'espère que lorsque vous travaillerez dessus, vous publierez le flux Twitch afin que nous puissions nous assurer de vous connecter 👍

Je vais travailler dessus pour 4.7/4.8
J'ai mis à jour la spécification si quelqu'un veut commenter

Désolé pour la question stupide : où puis-je trouver et lire les spécifications ?

@ncarandini Je viens de mettre à jour la description de ce problème avec la spécification

Oui merci!

Je crois que j'ai trouvé une solution de contournement pour cela (pour l'instant).
Faites ceci :

  • donnez un nom à votre article volant ou à vos articles, par exemple
    <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>

  • remplacez OnBindingContextChanged dans AppShell.cs et ajoutez du code pour vérifier la condition à masquer et à afficher, puis appelez la méthode Clear sur la propriété Items du flyitem
    protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); if(App.IsIntern) { fiAssess.Items.Clear(); fiPeer.Items.Clear(); fiSelf.Items.Clear(); fiVerifications.Items.Clear(); } }

travaille pour moi

fermé par #10980

Cela se comporte toujours bizarrement, chaque fois que nous modifions dynamiquement la propriété IsVisible sur un BaseShellItem, de temps en temps le style d'un ShellContent se perdait. Pousser une page au-dessus du contenu du shell, puis la faire apparaître semble résoudre le problème.

Un exemple serait d'avoir 2 pages, le contenu du shell X a un bouton qui change une propriété booléenne qui est liée à la propriété IsVisible sur le contenu du shell Y

@GeorgeVelikov pouvez-vous signaler un problème ?

Cette page vous a été utile?
0 / 5 - 0 notes