logo Devexpress WPF控件文档中心
文档首页>>Devexpress WPF控件文档中心>>预加载主题资源

预加载主题资源


立即下载DevExpress WPF

当您将DevExpress WPF主题应用到应用程序时,控件会使用主题资源(默认样式、模板、键)来更改它们的外观。

WPF应用程序仅在即将显示控件时加载控件的主题资源,因此依赖于DevExpress WPF主题的窗口可能需要更长的时间才能出现。

当应用程序的第一个窗口很轻(例如,登录表单),而主应用程序窗口很重(它包含一个或多个控件)时,这种延长的显示时间可能是至关重要的。在这种情况下,第一个窗口出现得很快,但是第二个窗口加载主题资源可能要花很长时间。

PreloadThemeResourcePreloadThemeResourceAsync方法允许您加快后续窗口的显示时间,这些方法为在这些窗口上引用的控件程序集预加载主题资源。

更多信息请参考以下方法的备注: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


扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP