Xamarin.forms: [Verbesserung] FlyoutItem.IsVisible, Tab.IsVisible, BaseShellItem.IsVisible hinzugefügt

Erstellt am 13. Feb. 2019  ·  26Kommentare  ·  Quelle: xamarin/Xamarin.Forms

Zusammenfassung

Stellen Sie angehängte Eigenschaften bereit, damit Benutzer direkter definieren können, ob etwas im Flyout oder in der TabBar sichtbar ist.

Zukünftige API-Vorschläge

Wir sollten Optionen hinzufügen, damit Benutzer, wenn sie FlyoutDisplayOptions="AsMultipleItems" verwenden, wählen können, ob sie das übergeordnete Element als Kopfzeile anzeigen möchten. Mit der Erweiterungssteuerung könnten wir das auch als Einstellung hinzufügen.

API

```C#
FlyoutItem.IsVisible //BP angehängte Eigenschaft
Tab.IsVisible //BP angehängte Eigenschaft
BaseShellItem.IsVisible // BP (nicht angehängte Eigenschaft)

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

Beispiele FlyoutItem.IsVisible

Benutzer möchten ein Flyout, das keine der Registerkarten auf dem Bildschirm widerspiegelt.

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

Rendert 3 Flyout-Elemente

  • Gegenstand 1
  • Punkt 2

- Punkt 3

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

Rendert 2 Flyout-Elemente, selbst wenn Sie sich auf dem ShellContent-Element befinden

  • Gegenstand 1
  • Punkt 2

Beabsichtigter Anwendungsfall

Der Anwendungsfall, an den ich denke, ist ein Element im Hamburger-Menü, mit dem der Benutzer die App auf Premium aktualisieren kann. Sobald der Benutzer das Upgrade durchgeführt hat, sollte das Element nicht mehr sichtbar sein.
Elternteil: #2415

shell in-progress high impact proposal-accepted enhancement ➕

Hilfreichster Kommentar

Könnten wir bitte ein Update dazu bekommen? (wirklich, wirklich will das!)

Alle 26 Kommentare

Gibt es hierzu Neuigkeiten?

@PureWeen Ich habe gesehen, wie Sie das auf dem Xam Dev Summit verwendet haben. Ist das in einem Pre oder schon etwas?

Ein weiterer beabsichtigter Anwendungsfall besteht darin, dass ein Satz von Funktionen (häufig verwendet) in der unteren Registerkartenleiste sichtbar sein sollte und ein anderer Satz von Funktionen (Einstellungen, Käufe wiederherstellen, Hilfe, Info usw.) über das Hamburger-Menü zugänglich sein sollte. Wenn dies bereits möglich ist, lassen Sie es mich bitte wissen.

Könnten wir bitte ein Update dazu bekommen? (wirklich, wirklich will das!)

stoßen

Brauche das wirklich

Gibt es hierzu Neuigkeiten?

Irgendein Update? Wir brauchen das wirklich.

Gibt es hierzu Neuigkeiten?

Shell scheint ziemlich nutzlos zu sein, es sei denn, Sie erstellen eine sehr kleine App. Ohne dies können wir keine Berechtigungen festlegen oder Seiten ausblenden, die wir nicht im Flyout haben möchten. Warum hat das jetzt keine Priorität?

Du hast recht @brepetti
Ich frage mich, ob ich hier etwas übersehe...

@rodrigojuarez @brepetti

Der lustige Teil ist letztes Jahr auf der XDS, es wurde als ein Artikel diskutiert, der bald erscheinen würde ... Bis zu einem Punkt, an dem sie es zeigten.

Ich denke, dass dies wahrscheinlich ein Blocker war, weil es mit dem Navigationsstapel umgeht. Weil ich weiß, dass das bei XDS gezeigte Beispiel einen größtenteils benutzerdefinierten / neu erstellten Navigationsstapel verwendete.

Ich habe es geschafft, es für TabBar Top Tabs mit einer manuellen Problemumgehung zum Laufen zu bringen, indem ich die ShellContent-Elemente manuell erstellt habe (Hinzufügen, Entfernen). In Xamarin.Forms 4.6 funktioniert es jetzt auch für iOS (nur vor 1 Tag in 4.6 behoben).

Sollte auch für Hamburger Menu funktionieren?

@malte1989 Ja, wir sprechen von einem Shell-Element, auch bekannt als etwas, das sich im visuellen Shell-Baum befindet.

@malte1989 könnten Sie bitte einen Beispielcode bereitstellen?

@malte1989 könnten Sie bitte einen Beispielcode bereitstellen?

Klar, ich werde morgen den Code für meine Tabbar-Lösung posten.

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

Konstrukteur

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

Umschalten von Seite 0 auf 1

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

Möglicherweise benötigen Sie diese beiden Methoden zur Handhabung Ihrer Navigation

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

Ich hoffe das hilft dir. Bitte lassen Sie mich eine Notiz, wenn dies für Sie funktioniert.

Ich werde daran für 4.7/4.8 arbeiten

Ich habe die Spezifikation aktualisiert, falls jemand einen Kommentar abgeben möchte

@PureWeen Nein, aber ich hoffe, wenn du damit anfängst, postest du den Twitch-Stream, damit wir sicherstellen können, dass wir uns einschalten 👍

Ich werde daran für 4.7/4.8 arbeiten
Ich habe die Spezifikation aktualisiert, falls jemand einen Kommentar abgeben möchte

Entschuldigung für die dumme Frage: Wo kann ich die Spezifikationen finden und lesen?

@ncarandini Ich habe gerade die Beschreibung zu diesem Problem mit der Spezifikation aktualisiert

Ja dank!

Ich glaube, ich habe (vorerst) eine Problemumgehung dafür gefunden.
Mach das:

  • Geben Sie Ihrem Flyout-Element oder Ihren Artikeln einen Namen, z
    <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>

  • Überschreiben Sie OnBindingContextChanged in AppShell.cs und fügen Sie Code hinzu, um die Bedingung zum Ausblenden und Anzeigen zu überprüfen, und rufen Sie dann die Clear-Methode für die Items-Eigenschaft des Flyitem auf
    protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); if(App.IsIntern) { fiAssess.Items.Clear(); fiPeer.Items.Clear(); fiSelf.Items.Clear(); fiVerifications.Items.Clear(); } }

funktioniert bei mir

geschlossen durch #10980

Dies verhält sich immer noch seltsam, wenn wir die IsVisible-Eigenschaft auf einem BaseShellItem dynamisch ändern, ging hin und wieder das Styling eines ShellContent verloren. Das Schieben einer Seite über den Shell-Inhalt und das anschließende Aufklappen scheint das Problem zu beheben.

Ein Beispiel wäre, 2 Seiten zu haben, Shell-Inhalt X hat eine Schaltfläche, die eine boolesche Eigenschaft ändert, die an die IsVisible-Eigenschaft von Shell-Inhalt Y gebunden ist

@GeorgeVelikov kannst du ein Problem protokollieren?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen