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