预加载主题资源
当您将DevExpress WPF主题应用到应用程序时,控件会使用主题资源(默认样式、模板、键)来更改它们的外观。
WPF应用程序仅在即将显示控件时加载控件的主题资源,因此依赖于DevExpress WPF主题的窗口可能需要更长的时间才能出现。
当应用程序的第一个窗口很轻(例如,登录表单),而主应用程序窗口很重(它包含一个或多个控件)时,这种延长的显示时间可能是至关重要的。在这种情况下,第一个窗口出现得很快,但是第二个窗口加载主题资源可能要花很长时间。
PreloadThemeResource和PreloadThemeResourceAsync方法允许您加快后续窗口的显示时间,这些方法为在这些窗口上引用的控件程序集预加载主题资源。
更多信息请参考以下方法的备注:PreloadThemeResource / PreloadThemeResourceAsync。
设置CompatibilitySettings.AllowThemePreload属性为true来启用主题预加载。
异步主题资源预加载
如何使用
当应用程序的启动窗口是轻量级的(比如登录表单)时,异步主题预加载的效果最好,在这种情况下,您可以使用PreloadThemeResourceAsync方法在用户输入登录凭据时异步预加载第二个窗口的主题资源。
示例
下面的代码示例创建静态构造函数,并在应用程序启动时异步预加载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
问题
异步主题资源预加载可能会减慢UI线程的资源加载速度。
同步主题资源预加载
何时使用
当您在应用程序启动时显示闪屏管理器时,此技术效果最佳。在这种情况下,该方法在显示闪屏时会加载控件的主题资源。
表现
主题预加载会减慢应用程序的启动速度,但会加快使用预加载主题资源的后续窗口的启动速度。
示例
调用preloadthemerresource方法来同步预加载主题资源。
下面的代码示例在显示闪屏管理器时预加载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