Using the Xaminals example, I'm trying to set the default startup page. Here's the relevant code from the xaml:
<FlyoutItem Route="animals" x:Name="shellAnimals"
Title="Animals"
FlyoutDisplayOptions="AsMultipleItems">
<Tab Title="Domestic" x:Name="shellDomestic"
Route="domestic"
Icon="paw.png">
<ShellContent Route="cats" x:Name="shellCats"
Style="{StaticResource DomesticShell}"
Title="Cats"
Icon="cat.png"
ContentTemplate="{DataTemplate views:CatsPage}" />
<ShellContent Route="dogs" x:Name="shellDogs"
Style="{StaticResource DomesticShell}"
Title="Dogs"
Icon="dog.png"
ContentTemplate="{DataTemplate views:DogsPage}" />
</Tab>
<ShellContent Route="monkeys" x:Name="shellMonkeys"
Style="{StaticResource MonkeysShell}"
Title="Monkeys"
Icon="monkey.png"
ContentTemplate="{DataTemplate views:MonkeysPage}" />
<ShellContent Route="elephants" x:Name="shellElephants"
Style="{StaticResource ElephantsShell}"
Title="Elephants"
Icon="elephant.png"
ContentTemplate="{DataTemplate views:ElephantsPage}" />
<ShellContent Route="bears" x:Name="shellBears"
Style="{StaticResource BearsShell}"
Title="Bears"
Icon="bear.png"
ContentTemplate="{DataTemplate views:BearsPage}" />
</FlyoutItem>
In the code behind I can successfully set the default startup page.
For example, the dogs page:
shellAnimals.CurrentItem.CurrentItem = shellDogs;
But on the bears page:
// This works, but I don't like the indexing. Will give trouble on dynamic menu's
shellAnimals.CurrentItem = shellAnimals.Items[3];
// This doesn't work, but I don't understand why. It gives a null reference exception in the Xamarin Shell code, on the PushAsync
shellAnimals.CurrentItem = shellBears;
// This shows the bears page at startup, but when I click on an item in the listview, I also get a null reference error
CurrentItem = shellBears;
Can't find anything on this subject except Set default tab on Xamarin Forms Shell but that doesn't answer it.
Navigating backwards and into a specified route is only possible if the backwards navigation places you at the current location in the route hierarchy to navigate to the specified route. await Shell. Current. GoToAsync("../../route");
A flyout page typically displays a list of items, as shown in the following screenshots: The location of the list of items is identical on each platform, and selecting one of the items will navigate to the corresponding detail page.
Xamarin. Forms Shell reduces the complexity of mobile application development by providing the fundamental features that most mobile applications require, including: A single place to describe the visual hierarchy of an application. A common navigation user experience.
A page shell is an content page, basically serving as a placeholder for content at a later point.
You can set the current page in XAML, as per the documentation Set-the-current-flyoutitem. This would then mean your Shell
tag, you would add `CurrentItem="{x:Reference shellBears}"1.
Additionally, I see in your second code behind snippet you are missing another .CurrentItem
step when compared to the dogs example that you say works. Can you try shellAnimals.CurrentItem.CurrentItem = shellBears;
Why doesn't the second/third snippet work?
The second snippet:
shellAnimals.CurrentItem
is a variable which type is ShellSection
while your shellBears is kind of ShellContent
.
The third snippet:
When you use CurrentItem
directly in the shell class, that is Shell.CurrentItem
and it's a ShellItem
.
How can I set the default page to the bears page without using the indexer?
In your Xaml:
<ShellSection x:Name="shellBears" Title="Bears"
Icon="bear.png">
<ShellContent Route="bears"
Style="{StaticResource BearsShell}"
ContentTemplate="{DataTemplate views:BearsPage}" />
</ShellSection >
And in code behind:
shellAnimals.CurrentItem = shellBears;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With