تمرين: تنفيذ التنقل بين علامات التبويب
في تطبيق علم الفلك، يطلب منك دمج علامات التبويب مع القائمة المنبثقة للمساعدة في التنقل بين الصفحات المختلفة.
أول شيء تقرر القيام به هو إزالة جميع الصفحات من القائمة المنبثقة وإضافتها إلى TabBar، حتى تتمكن من رؤية شعور التطبيق.
إضافة شريط جدولة
في نافذة مستكشف الحلول، افتح صفحة AppShell.xaml.
في صفحة علامات XAML، احذف كل شيء داخل
<Shell>.<TabBar>إنشاء و فارغ<Tab>.<?xml version="1.0" encoding="UTF-8" ?> <Shell x:Class="Astronomy.AppShell" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Astronomy.Pages" FlyoutIcon="moon.png"> <TabBar> <Tab> </Tab> </TabBar> </Shell>بعد ذلك، أضف
ShellContentإلىTabوقم بتعيين محتواه إلىMoonPhasePage.<TabBar> <Tab> <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}" /> </Tab> </TabBar>الآن امنح علامة التبويب عنوانا ليتم عرضه وأيقونة باستخدام الخاصيتين
TitleوIcon.<Tab Title="Moon Phase" Icon="moon.png">أضف في آخر
TabلSunrisePage. تعيينهTitleإلى شروق الشمس وإلىIconsun.png. يبدو XAML النهائي كما يلي:<?xml version="1.0" encoding="UTF-8" ?> <Shell x:Class="Astronomy.AppShell" xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Astronomy.Pages" FlyoutIcon="moon.png"> <TabBar> <Tab Title="Moon Phase" Icon="moon.png"> <ShellContent ContentTemplate="{DataTemplate local:MoonPhasePage}" /> </Tab> <Tab Title="Sunrise" Icon="sun.png"> <ShellContent ContentTemplate="{DataTemplate local:SunrisePage}"/> </Tab> </TabBar> </Shell>قم بتشغيل التطبيق لمعرفة كيف يبدو.
دمج صفحات علامة التبويب مع قائمة منبثقة
قررت أنه من المنطقي أن يكون لديك مرحلة القمر وصفحات شروق الشمس في نفس صفحة علامة التبويب. من المنطقي أيضا الاحتفاظ بالصفحة حول منفصلة. لذلك قررت إضافة القائمة المنبثقة مرة أخرى. يعرض عنصر القائمة المنبثقة الأول صفحة علامة التبويب، والثاني صفحة حول.
احذف
TabBarكل العناصر التابعة الموجودة فيه.في مكانه، أضف في
<FlyoutItem>. قم بتعيين الخاصية الخاصة بهاTitleإلى Astronomy وأيقونتها إلى moon.png.<FlyoutItem Title="Astronomy" Icon="moon.png"> </FlyoutItem><FlyoutItem>ضمن ، أضف<ShellContent>الذي يشير إلىMoonPhasePage. تعيين الخاصية الخاصة بهTitleإلى طور القمر وخاصيةIconإلى moon.png.<FlyoutItem Title="Astronomy" Icon="moon.png"> <ShellContent Title="Moon Phase" Icon="moon.png" ContentTemplate="{DataTemplate local:MoonPhasePage}"/> </FlyoutItem>ضمن نفس
<FlyoutItem>، أضف آخر<ShellContent>للإشارة إلىSunrisePage. تعيين الخاصية الخاصة بهTitleإلى شروق الشمس والخاصية إلىIcon.<FlyoutItem Title="Astronomy" Icon="moon.png"> <ShellContent Title="Moon Phase" Icon="moon.png" ContentTemplate="{DataTemplate local:MoonPhasePage}"/> <ShellContent Title="Sunrise" Icon="sun.png" ContentTemplate="{DataTemplate local:SunrisePage}"/> </FlyoutItem>الآن، يؤدي الضغط على عنصر القائمة المنبثقة هذا إلى عرض صفحة علامة تبويب بعلامة تبويب.
لإنشاء عنصر قائمة منبثقة جديد يشير إلى
AboutPage، أضف جديدا<FlyoutItem>. قم بتعيين الخاصية الخاصة بهTitleإلى حول والخاصيةIconإلى question.png.ضمن ذلك
<FlyoutItem>، أضف<ShellContent>الذي يشير إلىAboutPage.<FlyoutItem Title="About" Icon="question.png"> <ShellContent ContentTemplate="{DataTemplate local:AboutPage}"/> </FlyoutItem>شغّل التطبيق مرة أخرى. يجب أن تشاهد عنصرين في القائمة المنبثقة. يفتح الأول صفحة علامة تبويب تحتوي على
MoonPhasePageوSunrisePage. يعرض الثاني نفسهAboutPage.
هل تحتاج إلى مساعدة؟
يجب أن تبدو التعليمات البرمجية XAML النهائية ل AppShell.xaml مثل هذا المثال:
<?xml version="1.0" encoding="UTF-8" ?>
<Shell
x:Class="Astronomy.AppShell"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Astronomy.Pages"
FlyoutIcon="moon.png">
<!-- You can add this back in for the header -->
<!--<Shell.FlyoutHeader>
<Grid HeightRequest="100" BackgroundColor="DarkSlateBlue">
<Image Source="moon.png"/>
</Grid>
</Shell.FlyoutHeader>-->
<FlyoutItem Title="Astronomy" Icon="moon.png">
<ShellContent Title="Moon Phase" Icon="moon.png"
ContentTemplate="{DataTemplate local:MoonPhasePage}"/>
<ShellContent Title="Sunrise" Icon="sun.png"
ContentTemplate="{DataTemplate local:SunrisePage}"/>
</FlyoutItem>
<FlyoutItem Title="About" Icon="question.png">
<ShellContent
ContentTemplate="{DataTemplate local:AboutPage}"/>
</FlyoutItem>
</Shell>