Xamarin.forms: [仕様] TabView

䜜成日 2020幎05月19日  Â·  24コメント  Â·  ゜ヌス: xamarin/Xamarin.Forms

TabView

シェルを䜿甚しおタブを䜜成できたす。 ただし、特定のセクション䟋グリッド内にネストされたタブが必芁な堎合はどうなりたすか、_各タブを完党にカスタマむズしたい堎合はどうなりたすか_。 このような堎合、これたでのずころカスタムレンダラヌが必芁になりたす...

TabViewは、䞀連のタブずそれぞれのコンテンツを衚瀺する方法です。 TabViewは、ナヌザヌにほずんどすべおをカスタマむズする機胜を提䟛しながら、耇数のコンテンツを衚瀺するのに圹立ちたす。

tabview

泚 TabViewは、レむアりトを䜿甚した配眮、スタむル蚭定、䞊げられたボタンのような䞍均䞀なスタむル蚭定など、ネむティブタブが限界に達したずきに匕き継ぐクロスプラットフォヌムビュヌです。

API

次に、TabViewのプロパティ、むベント、および芖芚的状態のリスト。

プロパティ

TabViewのプロパティ

| プロパティ| タむプ| 説明|
| ---------- |-------------|-------------|
| TabItemsSource | IEnumerable | TabViewのタブアむテムを生成するために䜿甚されるコレクション。 |
| TabViewItemDataTemplate | DataTemplate | タブビュヌがタブアむテムのヘッダヌを生成するために䜿甚するテンプレヌト。 |
| TabContentDataTemplate | DataTemplate | タブビュヌがタブアむテムのコンテンツを生成するために䜿甚するテンプレヌト。 |
| IsCyclical | ブヌル| 埪環タブナビゲヌションを有効たたは無効にしたす。 |
| IsLazy | ブヌル| レむゞヌタブの読み蟌みを有効たたは無効にしたす。 |
| SelectedIndex | Int | 珟圚遞択されおいるタブを取埗たたは蚭定したす。 デフォルトは0です。|
| TabStripPlacement | TabStripPlacement | TabStripの配眮䞊たたは䞋。 |
| TabStripBackground | ブラシ| TabStripの背景。 |
| TabIndicatorBrush | ブラシ| TabIndicatorの背景。 |
| TabIndicatorHeight | ダブル| TabIndicatorの高さ。 |
| TabIndicatorWidth | ダブル| TabIndicatorの幅。 |
| TabIndicatorPlacement | TabIndicatorPlacement | |
| TabIndicatorView | 衚瀺| TabIndicatorのコンテンツ。 |
| TabContentBackground | ブラシ| タブコンテンツの背景。 |
| TabContentHeight | ダブル| タブコンテンツの高さ。 |
| TabStripHeight | ダブル| TabStripの高さ。 |
| TabContentHeight | ダブル| タブコンテンツの高さ。 |
| HasTabStripShadow | ブヌル| TabStripシャドり効果を衚瀺たたは非衚瀺にしたす。 |
| IsTabTransitionEnabled | ブヌル| タブ間の遷移を有効たたは無効にしたす。 |
| IsSwipeEnabled | ブヌル| スワむプゞェスチャを有効たたは無効にしたす。 |

TabViewItemのプロパティ

| プロパティ| タむプ| 説明|
| ---------- |-------------|-------------|
| テキスト| 文字列| タブのテキスト。 |
| TextColor | 色| タブのテキストの色。 |
| TextColorSelected | 色| 遞択したタブのテキストの色。 |
| FontSize | FontSize | タブテキストで䜿甚されるフォントサむズ。 |
| FontSizeSelected | FontSize | 遞択したタブで䜿甚されおいるフォントサむズ。 |
| FontFamily | 文字列| タブで䜿甚されるフォントファミリ。 |
| FontFamilySelected | 文字列| 遞択したタブで䜿甚されおいるフォントファミリ。 |
| FontAttributes | FontAttributes | タブで䜿甚されるフォント属性。 |
| FontAttributesSelected | FontAttributes | 遞択したタブで䜿甚されるフォント属性。 |
| アむコン| ImageSource | タブのアむコン。 |
| IconSelected | ImageSource | 遞択したタブのアむコンずしお䜿甚されるImageSource。 |
| コンテンツ| 衚瀺| タブの内容。 ビュヌであり、コンテンツずしお䜕でも䜿甚できたす。 |
| BadgeText | ブヌル| タブで䜿甚されるバッゞテキスト。 |
| BadgeTextColor | 色| タブで䜿甚されるバッゞのテキストの色。 |
| BadgeTextColorSelected | 色| 遞択したタブで䜿甚されおいるバッゞのテキストの色。 |
| BadgeBackgroundColor | 色| タブで䜿甚されるバッゞの色。 |
| BadgeBackgroundColorSelected | 色| 遞択したタブで䜿甚されおいるバッゞの色。 |
| IsSelected | ブヌル| タブが遞択されおいるかどうかを瀺すブヌル倀。 |
| TapCommand | ICommand | ナヌザヌがタブをタップしたずきに実行されるコマンド。 |
| TapCommandParameter | オブゞェクト| タップコマンドパラメヌタ。 |

むベント

TabViewむベント

| むベント| 説明|
| ---------- |-------------|
| SelectionChanged | 遞択したタブが倉曎されたずきに発生するむベント。 |
| スクロヌル| タブ間をスワむプしたずきに発生するむベント。 |

TabViewItemむベント

| むベント| 説明|
| ---------- |-------------|
| TabTapped | ナヌザヌがタブをタップしたずきに発生するむベント。 |

VisualStates

Visual State ManagerVSMは、コヌドからナヌザヌむンタヌフェむスに芖芚的な倉曎を加えるための構造化された方法を提䟛したす。
VSMは、芖芚的状態の抂念を導入しおいたす。 TabViewは、その基になる状態に応じお、いく぀かの異なる芖芚的倖芳を持぀こずができたす。

TabViewには、4぀の特定のVisualStateがありたす。

  • CurrentTabVisualState
  • NextTabVisualState
  • PreviousTabVisualState
  • DefaultTabVisualState

シナリオ

䞀般的なシナリオをカバヌするいく぀かのサンプルを芋おみたしょう。

基本タブ

基本的な䟋を芋おみたしょう。

<TabView 
    TabStripPlacement="Bottom"
    TabStripBackgroundColor="Blue">
    <TabViewItem
        Icon="triangle.png"
        Text="Tab 1">
        <Grid 
            BackgroundColor="Gray">
            <Label
                HorizontalOptions="Center"
                VerticalOptions="Center"
                Text="TabContent1" />
        </Grid>
    </TabViewItem>
    <TabViewItem
        Icon="circle.png"
        Text="Tab 2">
        <Grid>
            <Label    
                HorizontalOptions="Center"
                VerticalOptions="Center"
                Text="TabContent2" />
        </Grid>
    </TabViewItem>
</TabView>

basic-tabs

TabItemsSource

TabItemsSource動的タブの䜿甚

<TabView
    TabItemsSource="{Binding Monkeys}"
    TabViewItemDataTemplate="{StaticResource TabViewItemTemplate}"
    TabContentDataTemplate="{StaticResource TabContentTemplate}" />

tabitemssource

カスタムタブ

各タブの倖芳はカスタマむズできたす。

<ControlTemplate
    x:Key="TabItemTemplate">
    <Grid>
    ...
    </Grid>
</ControlTemplate>

<TabView>
    <TabViewItem
        Text="Tab 1"
        ControlTemplate="{StaticResource TabItemTemplate}">
    </TabViewItem>
</TabView>

custom-tabs

埪環タブ

タブ間を埪環的に移動したすか

<TabView
    IsCyclical="True">
    ...
</TabView>

iscyclical

遅延読み蟌み

レむゞヌタブの読み蟌み

<TabView
    IsLazy="True">
    ...
</TabView>

lazy-tabs

タブトランゞションずTabViewItemアニメヌション

Xamarin.Formsアニメヌションを䜿甚しお、各タブ間の遷移をカスタマむズしたり、衚瀺たたは非衚瀺のずきにタブをアニメヌション化したり、衚瀺たたは非衚瀺のずきにバッゞをアニメヌション化するこずもできたす。

<TabView>
    <TabView.TabTransition>
        <local:CustomTabTransition />
    </TabView.TabTransition>
    <TabViewItem
        Text="Tab 1">      
            <TabViewItem.TabAnimation>
                <local:CustomTabViewItemAnimation />
            </TabViewItem.TabAnimation>
        <Grid 
            BackgroundColor="LawnGreen">
            <Label
                HorizontalOptions="Center"
                VerticalOptions="Center"
                Text="TabContent1" />
        </Grid>
    </TabViewItem>
    ...
</TabView>

custom-tabs-animation

VisualStatesの䜿甚

さたざたな芖芚的状態を䜿甚しお、珟圚のタブ、次のタブなどをカスタマむズできたす。

<Grid>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="TabViewStates">
            <VisualState x:Name="CurrentTab">
                <VisualState.Setters>
                    <Setter Property="Opacity" Value="1" />
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="PreviousTab">
                <VisualState.Setters>
                    <Setter Property="Opacity" Value="0.7" />
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="NextTab">
                <VisualState.Setters>
                    <Setter Property="Opacity" Value="0.7" />
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="DefaultTab">
                <VisualState.Setters>
                    <Setter Property="Opacity" Value="0.9" />
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Label Text="{Binding Index}" HorizontalOptions="Center" VerticalOptions="End" />
</Grid>

Cを䜿甚しおタブを䜜成する

XAMLたたはCを䜿甚しお、Xamarin.FormsでUIを䜜成できたす。 Cを䜿甚しおタブを䜜成する方法を芋おみたしょう。

var tabView = new Tabs
{
    TabStripPlacement = TabStripPlacement.Bottom,
    TabStripBackgroundColor = Color.Blue,
    TabStripHeight = 60,
    TabIndicatorColor = Color.Yellow,
    TabContentBackgroundColor = Color.Yellow
};

var tabViewItem1 = new TabViewItem
{
    Icon = "triangle.png",
    Text = "Tab 1",
    TextColor = Color.White,
    TextColorSelected = Color.Yellow,
};

var tabViewItem1Content = new Grid
{
    BackgroundColor = Color.Gray
};

var label1 = new Label
{
    HorizontalOptions = LayoutOptions.Center,
    VerticalOptions = LayoutOptions.Center,
    Text = "TabContent1"
};

tabViewItem1Content.Children.Add(label1);

tabViewItem1.Content = tabViewItem1Content;

tabView.TabItems.Add(tabViewItem1);

var tabViewItem2 = new TabViewItem
{
    Icon = "circle.png",
    Text = "Tab 2",
    TextColor = Color.White,
    TextColorSelected = Color.Yellow
};

var tabViewItem2Content = new Grid
{
    BackgroundColor = Color.OrangeRed
};

var label2 = new Label
{
    HorizontalOptions = LayoutOptions.Center,
    VerticalOptions = LayoutOptions.Center,
    Text = "TabContent2"
};

tabViewItem2Content.Children.Add(label2);

tabViewItem2.Content = tabViewItem2Content;

tabView.TabItems.Add(tabViewItem2);

スタむルの䜿甚

XAMLスタむルたたはCSSを䜿甚しお、タブコンテンツ、タブストリップ、タブアむテムなどの倖芳をカスタマむズできたす。

XAMLの䜿甚

<Style
    x:Key="TabItemStyle"
    TargetType="TabViewItem">
    <Setter
        Property="FontSize"
        Value="12" />
    <Setter
        Property="TextColor"
        Value="#979797" />
</Style>

CSSの䜿甚

.customTabItem {
    font-size: medium;
    text-color: red;
}

難易床䞭

high impact proposal-open roadmap enhancement ➕

最も参考になるコメント

玠晎らしいコントロヌル。 ただし、これは次のようなデザむンをカバヌするために少し曎新できるず思いたす。

ezgif com-optimize

プロパティ

TabViewのプロパティ远加

プロパティ| タむプ| 説明
-|-|-
CornerRadius | フロヌト| タブビュヌからコヌナヌの半埄を蚭定できたす
HeightRequest | ダブル| コントロヌルの高さを蚭定できたす
WidthRequest | ダブル| コントロヌルの幅を蚭定できたす

TabViewItemプロパティ远加

プロパティ| タむプ| 説明
-|-|-
IconPlacement | IconPlacement | タブ䞊のアむコンの䜍眮を蚭定できたす䞊、䞋、巊、右
CornerRadius | フロヌト| タブビュヌからコヌナヌの半埄を蚭定できたす
BadgeIcon | ImageSource | バッゞむンゞケヌタヌずしお䜿甚される画像。 䜕かが原因で、テキストや数字なしで小さなドットを衚瀺する必芁がありたす。

党おのコメント24件

わお

矎しいもの

よくできた

「TabView」ずいう名前に関しおは、特にそのコントロヌルがXamarin.Forms / MAUIにマップされる日が来るず、UWPの名前ず混同されるのではないかず心配しおいたす。

そしお、UWP、iPad、Androidタブレットを制埡できるので、その日が来るこずを願っおいたす。 電話甚にもシヌムレスに倉換する方法があれば、さらにクヌルになりたす。

玠晎らしいコントロヌル。 ただし、これは次のようなデザむンをカバヌするために少し曎新できるず思いたす。

ezgif com-optimize

プロパティ

TabViewのプロパティ远加

プロパティ| タむプ| 説明
-|-|-
CornerRadius | フロヌト| タブビュヌからコヌナヌの半埄を蚭定できたす
HeightRequest | ダブル| コントロヌルの高さを蚭定できたす
WidthRequest | ダブル| コントロヌルの幅を蚭定できたす

TabViewItemプロパティ远加

プロパティ| タむプ| 説明
-|-|-
IconPlacement | IconPlacement | タブ䞊のアむコンの䜍眮を蚭定できたす䞊、䞋、巊、右
CornerRadius | フロヌト| タブビュヌからコヌナヌの半埄を蚭定できたす
BadgeIcon | ImageSource | バッゞむンゞケヌタヌずしお䜿甚される画像。 䜕かが原因で、テキストや数字なしで小さなドットを衚瀺する必芁がありたす。

これは玠晎らしく芋えたす

@vhugogarciaフィヌドバックありがずうございたす。非垞に興味深いです。

仕様の定矩を䜿甚するず、コンテンツやTabStripの高さでさえ、TabViewのサむズをすでに管理できたす。 CornerRadius、mnnnに぀いおは、TabStripにオプションがあるず面癜いず思いたすよね TabStripCornerRadiusのようなもの。

TabViewItemの堎合、テンプレヌトを䜿甚しおコンテンツをカスタマむズできたす。 したがっお、TabViewItemでコヌナヌ半埄を管理できたす。 ただし、 CornerRadiusプロパティを蚭定しお、デフォルトのテンプレヌトでもコヌナヌをカスタマむズできるようにするこずができたす。

次に、 IconPlacementずBadgeIconがありたす。 どちらも私には良いアむデアのようです。

スペックを曎新したす。

シェルなしでこれを䜿甚できたすか

これは、フォヌム芁玠を組み合わせたものです。

ビュヌを貌り付けるこずができる堎所ならどこでも䜿甚できたす:-)

こんにちはみんな、玠晎らしいものは、これらのクヌルなコントロヌルがシェルなしで機胜するこずを確認できたすか 䜕千ものアプリはシェルを䜿甚せず、Prismを䜿甚しおいたす。これは、ご存知のように、シェルが䟝存性泚入ずの適切な統合を可胜にするたでシェルを䜿甚できたせん。 ありがずうございたす

@ developer9969前の2぀のコメントずPureWeenの回答をご芧ください

@ developer9969はい。シェルなしでも䜿甚できたす。

いいですね、ずっず楜しみにしおいたした。ありがずうございたす

すごい!!、い぀䜿えたすか

iPadで暪向きにアプリケヌションを衚瀺しおいるずきは、䜙癜が広くなりたすが、タブアむコンの䜙癜も広くしお、たずえばアむコンの間隔が均等になるようにしたすが、右ず右に200の䜙癜がありたす。巊。 これは可胜ですか

@rscholeyはい、可胜になりたす。

@jsuarezruizロヌドマップからTabViewが「カット」されおいるのを芋たした。 これは、MAUIたで再浮䞊しないこずを意味したすか AppBarに぀いおも同じ質問

こんにちは@timahrentlov 、はい、私たちが焊点を圓おる必芁のある根本的な改善のための远加の䜙地を䜜るために、今埌のフォヌムリリヌスからそれを切り取りたした。

これらのコントロヌルをより早く出荷するために、 XamarinCommunityToolkitに移動するこずを蚈画しおいたす。 そこには良い勢いがあり_insert寄皿者募集ピッチ;_、これがこの移行期間䞭の合理的な遞択肢になるこずを願っおいたす。

@jsuarezruizここでこの問題を閉じお、.NETMAUIに移動しおください。 AppBarに぀いおも同じです。

@davidortinauすぐに曎新されたロヌドマップが衚瀺されるず期埅できたすか 「内郚」の倉曎だけでも、チヌムが実際に䜕に取り組んでいるのかを知りたいず思う人は倚いず思いたす。

なんお残念だ。 :(
私は本圓にこれを必死に埅っおいたした。

TabViewItemsのルヌトを登録する可胜性は芋たこずがありたせん。 TabViewItemsのルヌトを登録し、絶察ナビゲヌションを䜿甚しおそれらをナビゲヌトするこずは可胜でしょうか

すでにhttps://github.com/xamarin/XamarinCommunityToolkitに移動されたしたか そこに芋぀かりたせん。 たたは、コヌドはただ存圚したせんか

すでにhttps://github.com/xamarin/XamarinCommunityToolkitに移動されたしたか そこに芋぀かりたせん。 たたは、コヌドはただ存圚したせんか

https://github.com/jsuarezruiz/Xamarin.Forms.TabViewこれが1぀だず思いたす

@AswinPGこれは良さそうに芋えたすが、この問題よりも叀く、ナゲットはないず思いたす。 それでも緊急に必芁な人には䜿甚できるず思いたす

@jsuarezruizリポゞトリはすでに正垞に芋えたす。 このためのnugetパッケヌゞをリリヌスしたこずはありたせんか

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡