預(yù)加載主題資源
當(dāng)您將DevExpress WPF主題應(yīng)用到應(yīng)用程序時(shí),控件會(huì)使用主題資源(默認(rèn)樣式、模板、鍵)來(lái)更改它們的外觀。
WPF應(yīng)用程序僅在即將顯示控件時(shí)加載控件的主題資源,因此依賴于DevExpress WPF主題的窗口可能需要更長(zhǎng)的時(shí)間才能出現(xiàn)。
當(dāng)應(yīng)用程序的第一個(gè)窗口很輕(例如,登錄表單),而主應(yīng)用程序窗口很重(它包含一個(gè)或多個(gè)控件)時(shí),這種延長(zhǎng)的顯示時(shí)間可能是至關(guān)重要的。在這種情況下,第一個(gè)窗口出現(xiàn)得很快,但是第二個(gè)窗口加載主題資源可能要花很長(zhǎng)時(shí)間。
PreloadThemeResource和PreloadThemeResourceAsync方法允許您加快后續(xù)窗口的顯示時(shí)間,這些方法為在這些窗口上引用的控件程序集預(yù)加載主題資源。
更多信息請(qǐng)參考以下方法的備注:PreloadThemeResource / PreloadThemeResourceAsync。
設(shè)置CompatibilitySettings.AllowThemePreload屬性為true來(lái)啟用主題預(yù)加載。
異步主題資源預(yù)加載
如何使用
當(dāng)應(yīng)用程序的啟動(dòng)窗口是輕量級(jí)的(比如登錄表單)時(shí),異步主題預(yù)加載的效果最好,在這種情況下,您可以使用PreloadThemeResourceAsync方法在用戶輸入登錄憑據(jù)時(shí)異步預(yù)加載第二個(gè)窗口的主題資源。
示例
下面的代碼示例創(chuàng)建靜態(tài)構(gòu)造函數(shù),并在應(yīng)用程序啟動(dòng)時(shí)異步預(yù)加載Office2019Colorful主題資源。
App.xaml.cs:
using System.Windows; using System.Threading; using DevExpress.Xpf.Core; public partial class App : Application { static App() { CompatibilitySettings.AllowThemePreload = true; } protected async override void OnStartup(StartupEventArgs e) { base.OnStartup(e); await ThemeManager.PreloadThemeResourceAsync("Office2019Colorful"); } }
App.xaml.vb:
Imports System.Windows Imports System.Threading Imports DevExpress.Xpf.Core Public Partial Class App Inherits Application Private Shared Sub New() CompatibilitySettings.AllowThemePreload = True End Sub Protected Async Overrides Sub OnStartup(ByVal e As StartupEventArgs) MyBase.OnStartup(e) Await ThemeManager.PreloadThemeResourceAsync("Office2019Colorful") End Sub End Class
問(wèn)題
異步主題資源預(yù)加載可能會(huì)減慢UI線程的資源加載速度。
同步主題資源預(yù)加載
何時(shí)使用
當(dāng)您在應(yīng)用程序啟動(dòng)時(shí)顯示閃屏管理器時(shí),此技術(shù)效果最佳。在這種情況下,該方法在顯示閃屏?xí)r會(huì)加載控件的主題資源。
表現(xiàn)
主題預(yù)加載會(huì)減慢應(yīng)用程序的啟動(dòng)速度,但會(huì)加快使用預(yù)加載主題資源的后續(xù)窗口的啟動(dòng)速度。
示例
調(diào)用preloadthemerresource方法來(lái)同步預(yù)加載主題資源。
下面的代碼示例在顯示閃屏管理器時(shí)預(yù)加載Data Grid和LayoutControl程序集:
App.xaml.cs:
using DevExpress.Xpf.Core; using DevExpress.Xpf.Grid; using DevExpress.Xpf.LayoutControl; using System; using System.Runtime.CompilerServices; using System.Windows; public partial class App : Application { static Type[] types; static App() { CompatibilitySettings.AllowThemePreload = true; PreloadThemes(); } [MethodImpl(MethodImplOptions.NoInlining)] static void PreloadThemes() { types = new Type[] { typeof(GridControl), typeof(LayoutControl) }; SplashScreenManager.CreateThemed().ShowOnStartup(); ThemeManager.PreloadThemeResource("Office2019Colorful"); } }
App.xaml.vb:
Imports DevExpress.Xpf.Core Imports DevExpress.Xpf.Grid Imports DevExpress.Xpf.LayoutControl Imports System Imports System.Runtime.CompilerServices Imports System.Windows Public Partial Class App Inherits Application Shared types As Type() Private Shared Sub New() CompatibilitySettings.AllowThemePreload = True PreloadThemes() End Sub <MethodImpl(MethodImplOptions.NoInlining)> Private Shared Sub PreloadThemes() types = New Type() {GetType(GridControl), GetType(LayoutControl)} SplashScreenManager.CreateThemed().ShowOnStartup() ThemeManager.PreloadThemeResource("Office2019Colorful") End Sub End Class