البرمجة

تخصيص سمة التطبيق في تطبيقات UWP باستخدام Visual Studio 2015

في بيئة تطوير تطبيقات Universal Windows Platform (UWP) باستخدام Visual Studio 2015، يمكن تغيير سمة التطبيق بشكل دينامي على مستوى التطبيق بأكمله بطرق معينة. عندما تحاول تحديد سمة التطبيق باستخدام App.Current.RequestedTheme = ApplicationTheme.Dark;، قد تواجه استثناءً من نوع ‘System.NotSupportedException’.

تحدث هذه المشكلة على الأرجح بسبب القيود الموجودة في نموذج التطوير الخاص بـ UWP في Visual Studio 2015. لحل هذه المشكلة وتغيير سمة التطبيق بشكل دينامي، يمكنك اتباع أسلوب بديل.

أحد الطرق البديلة هي استخدام المتغيرات (Variables) في ملف التكوين (App.xaml). يمكنك إعداد متغير يُمثل السمة المطلوبة، ومن ثم استخدام ربط البيانات لربط متغير السمة بسمة التطبيق الفعلية. على سبيل المثال:

xml
<Application x:Class="YourAppName.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:YourAppName"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="LightTheme"> ResourceDictionary> <ResourceDictionary x:Key="DarkTheme"> ResourceDictionary> ResourceDictionary.ThemeDictionaries> <x:Boolean x:Key="IsDarkTheme">Falsex:Boolean> ResourceDictionary> Application.Resources> Application>

ثم يمكنك استخدام ربط البيانات لربط متغير السمة بسمة التطبيق على مستوى الصفحة أو العنصر. على سبيل المثال:

xml
<Page x:Class="YourAppName.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:YourAppName"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ToggleButton Content="Toggle Theme" IsChecked="{Binding Source={StaticResource IsDarkTheme}, Mode=TwoWay}" Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked"/> Grid> Page>

ثم يمكنك تنفيذ الكود التالي في رمز الصفحة لتحديد سمة التطبيق:

csharp
private void ToggleButton_Checked(object sender, RoutedEventArgs e) { Application.Current.Resources.MergedDictionaries.Clear(); Application.Current.Resources.MergedDictionaries.Add( new ResourceDictionary { Source = new Uri("ms-appx:///Themes/DarkTheme.xaml") }); } private void ToggleButton_Unchecked(object sender, RoutedEventArgs e) { Application.Current.Resources.MergedDictionaries.Clear(); Application.Current.Resources.MergedDictionaries.Add( new ResourceDictionary { Source = new Uri("ms-appx:///Themes/LightTheme.xaml") }); }

يرجى استبدال “Themes/DarkTheme.xaml” و “Themes/LightTheme.xaml” بمسار الملفات الخاصة بسماتك المخصصة.

باستخدام هذه الطريقة، يمكنك تحقيق تغيير سمة التطبيق بشكل دينامي دون مواجهة مشاكل الاستثناء السابقة. يمكنك أيضاً تحسين وتخصيص هذا النهج حسب احتياجات تطبيقك.

المزيد من المعلومات

تحقيق تغيير سمة التطبيق في تطبيق Universal Windows Platform يعد أمرًا حيويًا لتوفير تجربة مستخدم موحدة وجذابة. إليك مزيد من المعلومات حول هذا الموضوع:

ربط متغيرات السمة بشكل أفضل:

في المثال الذي قدمته، يتم استخدام متغير بسيط IsDarkTheme للتحكم في السمة. ومع ذلك، يمكنك تحسين ذلك باستخدام ميزات أفضل لربط البيانات في UWP.

xml
<x:DeferLoadableResource xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Key="AppTheme" Loaded="{ThemeResource AppTheme_Loaded}"> <x:DeferLoadableResource.DeferredContent> <x:DeferLoadableResource XamlContent="False"> <x:DeferLoadableResource.Content> <x:Boolean x:Key="IsDarkTheme">Falsex:Boolean> x:DeferLoadableResource.Content> x:DeferLoadableResource> x:DeferLoadableResource.DeferredContent> x:DeferLoadableResource>

هذا يستخدم DeferLoadableResource ومفتاح “AppTheme_Loaded” للتعامل مع تحميل السمة في وقت لاحق عند بدء تشغيل التطبيق.

استخدام ThemeResource بشكل أفضل:

يمكنك أيضًا تعزيز استخدام ThemeResource في التحكم في مظهر التطبيق. يمكنك تعريف مصادر السمات المخصصة الخاصة بك في ملفات XAML منفصلة، ومن ثم استخدام ThemeResource للربط بها.

xml
<Application.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="LightTheme" Source="ms-appx:///Themes/LightTheme.xaml"/> <ResourceDictionary x:Key="DarkTheme" Source="ms-appx:///Themes/DarkTheme.xaml"/> ResourceDictionary.ThemeDictionaries> <x:Boolean x:Key="IsDarkTheme">Falsex:Boolean> ResourceDictionary> Application.Resources>

التعامل مع الاستثناءات:

فيما يتعلق بالاستثناء ‘System.NotSupportedException’، يمكن أن يكون هذا الخطأ ناتجًا عن محاولة تغيير السمة بشكل غير صحيح أو قبل تهيئة العناصر اللازمة. يجب التأكد من أن العناصر الرئيسية مثل Application.Current جاهزة للاستخدام قبل محاولة تغيير السمة.

استكشاف Visual Studio 2019:

يفضل استخدام أحدث إصدار من Visual Studio (على سبيل المثال، 2019) لتطوير تطبيقات UWP، حيث يتم تحسين الأدوات ويتم دعم ميزات أكثر.

التوثيق والمجتمع:

تأكد من الرجوع إلى توثيق Microsoft حول UWP والمشاركة في مجتمع المطورين على منصات مثل GitHub و Stack Overflow للحصول على دعم إضافي وتبادل الأفكار.

من خلال تطبيق هذه النصائح والتحسينات، يمكنك بناء تطبيق UWP يُمكن مستخدميه من تخصيص تجربة السمة بشكل فعّال وبدون مشاكل.

زر الذهاب إلى الأعلى