如何在从右向左区域性应用程序中启用RTL模式
本主题展示如何在使用单个从右向左(RTL)区域性的应用程序中启用从右向左模式。
表单设置类:全局设置
WindowsFormsSettings类公开了静态属性,这些属性指定了所有DevExpress WinForms控件通用的各种全局设置,包括RTL设置。
我们建议您通过RightToLeft和RightToLeftLayout属性来启用RTL设置,但是如果应用程序没有本地化并且主要使用DevExpress控件,也可以使用和属性来支持从右到左的语言。这些全局设置只影响DevExpress表单和控件,并且优先于这些表单和控件公开的 RightToLeft/RightToLeftLayout 设置,在创建主应用程序表单之前设置 WindowsFormsSettings.RightToLeft和 WindowsFormsSettings.RightToLeftLayout 属性。如下面的代码片段所示:
C#:
using DevExpress.XtraEditors; static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { WindowsFormsSettings.RightToLeft = DevExpress.Utils.DefaultBoolean.True; WindowsFormsSettings.RightToLeftLayout = DevExpress.Utils.DefaultBoolean.True; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } }
VB.NET:
Imports DevExpress.XtraEditors Friend NotInheritable Class Program Private Sub New() End Sub ''' <summary> ''' The main entry point for the application. ''' </summary> <STAThread> _ Shared Sub Main() WindowsFormsSettings.RightToLeft = DevExpress.Utils.DefaultBoolean.True WindowsFormsSettings.RightToLeftLayout = DevExpress.Utils.DefaultBoolean.True Application.EnableVisualStyles() Application.SetCompatibleTextRenderingDefault(False) Application.Run(New Form1()) End Sub End Class
提示:WindowsFormsSettings类公开的RTL全局设置对标准Forms和控件无效,如果您使用标准Forms和控件,则通过每个表单或控件的RightToLeft 和 RightToLeftLayout属性分别启用相应的RTL设置。
提示:当使用WindowsFormsSettings类的全局设置时,您不能在单个应用程序中同时支持 left-to-right和 right-to-left区域性,因为这些设置会导致所有DevExpress控件从 right-to-left显示,如果应用程序只支持从 right-to-left的语言,则使用这些全局设置。
提示:我们强烈建议您不要同时使用RTL和非RTL表单,然而如果您的应用程序具有RTL和非RTL表单,则不要使用全局设置启用RTL模式此时请使用表单的设置。
左右设置
从右到左的语言支持包括从右到左的视觉元素对齐,此功能可以通过将应用程序中所有表单的RightToLeft 属性设置为Yes来启用。
当启用RTL模式时DevExpress控件布局会自动反转,下图显示了在默认和RTL模式下呈现的下拉按钮。
您可以在设计时或在代码中(在表单显示之前)为表单设置 RightToLeft属性,下面的代码片段展示了如何在XtraForm上启用 RightToLeft 设置。
C#:
public partial class Form1 : DevExpress.XtraEditors.XtraForm { public Form1() { InitializeComponent(); this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; } }
VB.NET:
Public Class Form1 Inherits DevExpress.XtraEditors.XtraForm Public Sub New() ' This call is required by the designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. Me.RightToLeft = Windows.Forms.RightToLeft.Yes End Sub End Class
提示:所有控件都有一个 RightToLeft属性,此属性的默认值是Inherit,这意味着它从父控件(通常是表单)继承设置。当其他控件从左到右对齐时,在特定控件上启用 RightToLeft 并不是一个好的做法,因为这可能会导致布局问题,相反应该通过表单的RightToLeft 或 属性来启用从右到左的对齐方式(见下文)。
RightToLeftLayout设置
RightToLeftLayout属性也维护RTL模式,此属性由表单(标准表单、XtraForm、RibbonForm或TabForm)以及几个标准和DevExpress控件提供,RightToLeftLayout设置应用以下内容:
- 反转表单的标准按钮(最小化、最大化和关闭)、系统菜单和标题(如果标题是左对齐的)的位置。
- 反映了控件的布局形式。
提示:要使 RightToLeft设置生效,必须将RightToLeftLayout属性设置为Yes。
在设计时或在代码中(在表单显示之前)为表单设置RightToLeftLayout属性,下面的代码展示了如何为样例RibbonForm启用RightToLeft 和RightToLeftLayout 设置。
C#:
public partial class Form1 : DevExpress.XtraBars.Ribbon.RibbonForm { public Form1() { InitializeComponent(); this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; this.RightToLeftLayout = true; } }
VB.NET:
Public Class Form1 Inherits DevExpress.XtraBars.Ribbon.RibbonForm Public Sub New() ' This call is required by the designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. Me.RightToLeft = Windows.Forms.RightToLeft.Yes Me.RightToLeftLayout = True End Sub End Class
提示:在运行时,对于已经显示的表单应该避免在运行时更改RightToLeft或RightToLeftLayout属性。
下图展示了以left-to-right和right-to-left的语言环境显示的样例RibbonForm,注意从右到左区域设置的控件布局是镜像的。
某些控件容器提供自己的RightToLeftLayout设置来激活可视化元素和子控件布局镜像,在大多数情况下,您需要启用这些设置才能正确支持RTL模式。如果控件容器(例如,标准的Windows表单面板)没有提供RightToLeftLayout设置,则根据目标区域性手动安排此容器中的子控件。
默认情况下,DevExpress容器控件在RTL模式下自动镜像它们的可视化元素和子控件的布局(当表单的 RightToLeft设置被启用并且RightToLeftLayout设置未被设置为False时)。如果一个DevExpress控制容器提供了它自己的RightToLeftLayout属性,您可以将这个属性设置为False来防止这个容器的自动布局镜像。以下控件容器提供了它们自己的RightToLeftLayout设置。
关于RTL,在表单中使用LayoutControl作为控件容器有几个优点,保持一致的布局并支持RTL模式,当表单(或LayoutControl)的RightToLeft 属性设置为Yes时,此模式将自动为LayoutControl激活。下图显示了在不同地区显示的样例LayoutControl。
翻译DevExpress的预定义字符串
DevExpress控件和组件显示许多预定义的字符串常量(例如,列上下文菜单中的文本),默认情况下是英文的。您可能希望将这些内置字符串转换为自己的语言,这个机制在通过附属资源程序集本地化WinForms控件文档中有描述。
本主题中描述的方法使用来获取附属资源程序集,在下载程序集时找到一个名称与所需区域性的缩写相匹配的文件夹(例如,他表示希伯来文化),并将其复制到应用程序可执行文件所在的目录中,不需要编写任何代码,因为应用程序会自动确定当前区域性并在启动时加载适当的程序集。