Xamarin.forms: [拡張] FlyoutItem.IsVisible、Tab.IsVisible、BaseShellItem.IsVisibleを追加します

作成日 2019年02月13日  ·  26コメント  ·  ソース: xamarin/Xamarin.Forms

概要

添付プロパティを提供して、ユーザーがフライアウトとタブバーのどちらに表示されるかをより直接的に定義できるようにします。

今後のAPIの提案

ユーザーがFlyoutDisplayOptions="AsMultipleItems"を使用するときに、親をヘッダーとして表示することを選択できるように、オプションを追加する必要があります。 拡張コントロールを使用すると、それを設定として追加することもできます。

API

`` `C#
FlyoutItem.IsVisible // BP添付プロパティ
Tab.IsVisible // BP添付プロパティ
BaseShellItem.IsVisible // BP(プロパティがアタッチされていない)

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

ShellContent要素を使用している場合でも、2つのフライアウトアイテムをレンダリングします

  • アイテム1
  • アイテム2

使用目的

私が念頭に置いているユースケースは、ユーザーがアプリをプレミアムにアップグレードするためのハンバーガーメニューの項目を用意することです。 ユーザーがアップグレードすると、アイテムは表示されなくなります。
親:#2415

shell in-progress high impact proposal-accepted enhancement ➕

最も参考になるコメント

これに関する最新情報を入手できますか? (本当に、本当にこれが欲しいです!)

全てのコメント26件

これに関する更新はありますか?

@PureWeen Xam Dev Summitでこれを使用しているのを見ましたが、これはPreか何かでまだですか?

もう1つの使用例は、1つの機能セット(頻繁に使用される)が下部のタブバーに表示され、別の機能セット(設定、購入の復元、ヘルプなど)がハンバーガーメニューからアクセスできるようにすることです。 これがすでに可能である場合は、私に知らせてください。

これに関する最新情報を入手できますか? (本当に、本当にこれが欲しいです!)

バンプ

本当にこれが必要です

これに関する更新はありますか?

すべてのアップデート? 本当に必要です。

これに関する更新はありますか?

非常に小さなアプリを作成していない限り、シェルはほとんど役に立たないようです。 これがないと、アクセス許可を設定したり、フライアウトで不要なページを非表示にしたりすることはできません。 これは今のところ優先事項ではないのですか?

あなたは正しい@brepetti
ここで何かが足りないのではないかと思います...

@rodrigojuarez @brepetti

面白い部分は去年のXDSで、まもなく登場するアイテムとして議論されました...彼らがそれを見せたところまで。

ナビゲーションスタックの処理方法が原因で、これはおそらくブロッカーになってしまったと思います。 XDSで示されている例は、ほとんどがカスタム/再構築されたナビゲーションスタックを使用していたことを私は知っているからです。

ShellContentアイテムを手動で作成(追加、削除)することで、手動の回避策を使用してTabBarトップタブで機能させることができました。 Xamarin.Forms 4.6では、iOSでも機能するようになりました(1日前の4.6で修正されました)。

ハンバーガーメニューでも機能するはずですか?

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

多分あなたはあなたのナビゲーションを扱うためにこれらの2つの方法を必要とします

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

  • AppShell.csのOnBindingContextChangedをオーバーライドし、条件をチェックして非表示および表示するコードを追加してから、flyitemのItemsプロパティでClearメソッドを呼び出します。
    protected override void OnBindingContextChanged() { base.OnBindingContextChanged(); if(App.IsIntern) { fiAssess.Items.Clear(); fiPeer.Items.Clear(); fiSelf.Items.Clear(); fiVerifications.Items.Clear(); } }

私のために働く

#10980で閉鎖

これはまだ奇妙な動作をしています。BaseShellItemのIsVisibleプロパティを動的に変更すると、ShellContentのスタイルが失われることがあります。 シェルコンテンツの上にページをプッシュしてからポップすると、修正されたようです。

例として、2ページがあり、シェルコンテンツXには、シェルコンテンツYのIsVisibleプロパティにバインドされているブールプロパティを変更するボタンがあります。

@GeorgeVelikov問題をログに記録できますか?

このページは役に立ちましたか?
0 / 5 - 0 評価