提供附加属性,以便用户可以更直接地定义某些内容是在 Flyout 中还是在 TabBar 中可见。
我们应该添加选项,以便当用户使用FlyoutDisplayOptions="AsMultipleItems"
时,他们可以选择将父级显示为标题。 使用扩展控件,我们也可以将其添加为设置。
```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>
用户想要一个不反映屏幕上任何选项卡的 Flyout。
<MenuItem title="item 1 "/>
<MenuItem title="item 2" />
<MenuItem title="item 3" />
<TabBar Shell.FlyoutBehavior="Flyout" FlyoutItem.IsVisible="False">
<Tab>
</Tab>
</TabBar>
渲染 3 个弹出项
<FlyoutItem title="item 1 " />
<FlyoutItem title="item 2" />
<ShellContent title="Content" FlyoutItem.IsVisible="False" />
即使您在 ShellContent 元素上,也会呈现 2 个弹出项
我想到的用例是在汉堡菜单中有一个项目,供用户将应用程序升级到高级版。 一旦用户升级了该项目,则该项目将不再可见。
家长:#2415
这事有进一步更新吗?
@PureWeen我在 Xam 开发峰会上看到你在使用这个,这是在 Pre 还是什么?
另一个预期的用例是一组功能(经常使用)应该在底部标签栏上可见,而另一组功能(设置、恢复购买、帮助、关于等)应该可以从汉堡菜单访问。 如果这已经可行,请告诉我。
我们能得到这方面的最新消息吗? (真的,真的很想要这个!)
撞
真的需要这个
这事有进一步更新吗?
任何更新? 我们真的需要这个。
这事有进一步更新吗?
除非您正在构建一个非常小的应用程序,否则 Shell 似乎几乎没有用。 没有这个,我们无法设置权限或隐藏我们不想要的弹出页面。 这怎么不是现在的优先事项?
你是对的@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);
也许你需要这两种方法来处理你的导航
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>
覆盖 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你能记录一个问题吗?
最有用的评论
我们能得到这方面的最新消息吗? (真的,真的很想要这个!)