如何在從右向左區(qū)域性應(yīng)用程序中啟用RTL模式
本主題展示如何在使用單個(gè)從右向左(RTL)區(qū)域性的應(yīng)用程序中啟用從右向左模式。
表單設(shè)置類(lèi):全局設(shè)置
WindowsFormsSettings類(lèi)公開(kāi)了靜態(tài)屬性,這些屬性指定了所有DevExpress WinForms控件通用的各種全局設(shè)置,包括RTL設(shè)置。
我們建議您通過(guò)RightToLeft和RightToLeftLayout屬性來(lái)啟用RTL設(shè)置,但是如果應(yīng)用程序沒(méi)有本地化并且主要使用DevExpress控件,也可以使用和屬性來(lái)支持從右到左的語(yǔ)言。這些全局設(shè)置只影響DevExpress表單和控件,并且優(yōu)先于這些表單和控件公開(kāi)的 RightToLeft/RightToLeftLayout 設(shè)置,在創(chuàng)建主應(yīng)用程序表單之前設(shè)置 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類(lèi)公開(kāi)的RTL全局設(shè)置對(duì)標(biāo)準(zhǔn)Forms和控件無(wú)效,如果您使用標(biāo)準(zhǔn)Forms和控件,則通過(guò)每個(gè)表單或控件的RightToLeft 和 RightToLeftLayout屬性分別啟用相應(yīng)的RTL設(shè)置。
提示:當(dāng)使用WindowsFormsSettings類(lèi)的全局設(shè)置時(shí),您不能在單個(gè)應(yīng)用程序中同時(shí)支持 left-to-right和 right-to-left區(qū)域性,因?yàn)檫@些設(shè)置會(huì)導(dǎo)致所有DevExpress控件從 right-to-left顯示,如果應(yīng)用程序只支持從 right-to-left的語(yǔ)言,則使用這些全局設(shè)置。
提示:我們強(qiáng)烈建議您不要同時(shí)使用RTL和非RTL表單,然而如果您的應(yīng)用程序具有RTL和非RTL表單,則不要使用全局設(shè)置啟用RTL模式此時(shí)請(qǐng)使用表單的設(shè)置。
左右設(shè)置
從右到左的語(yǔ)言支持包括從右到左的視覺(jué)元素對(duì)齊,此功能可以通過(guò)將應(yīng)用程序中所有表單的RightToLeft 屬性設(shè)置為Yes來(lái)啟用。
當(dāng)啟用RTL模式時(shí)DevExpress控件布局會(huì)自動(dòng)反轉(zhuǎn),下圖顯示了在默認(rèn)和RTL模式下呈現(xiàn)的下拉按鈕。
您可以在設(shè)計(jì)時(shí)或在代碼中(在表單顯示之前)為表單設(shè)置 RightToLeft屬性,下面的代碼片段展示了如何在XtraForm上啟用 RightToLeft 設(shè)置。
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
提示:所有控件都有一個(gè) RightToLeft屬性,此屬性的默認(rèn)值是Inherit,這意味著它從父控件(通常是表單)繼承設(shè)置。當(dāng)其他控件從左到右對(duì)齊時(shí),在特定控件上啟用 RightToLeft 并不是一個(gè)好的做法,因?yàn)檫@可能會(huì)導(dǎo)致布局問(wèn)題,相反應(yīng)該通過(guò)表單的RightToLeft 或 屬性來(lái)啟用從右到左的對(duì)齊方式(見(jiàn)下文)。
RightToLeftLayout設(shè)置
RightToLeftLayout屬性也維護(hù)RTL模式,此屬性由表單(標(biāo)準(zhǔn)表單、XtraForm、RibbonForm或TabForm)以及幾個(gè)標(biāo)準(zhǔn)和DevExpress控件提供,RightToLeftLayout設(shè)置應(yīng)用以下內(nèi)容:
- 反轉(zhuǎn)表單的標(biāo)準(zhǔn)按鈕(最小化、最大化和關(guān)閉)、系統(tǒng)菜單和標(biāo)題(如果標(biāo)題是左對(duì)齊的)的位置。
- 反映了控件的布局形式。
提示:要使 RightToLeft設(shè)置生效,必須將RightToLeftLayout屬性設(shè)置為Yes。
在設(shè)計(jì)時(shí)或在代碼中(在表單顯示之前)為表單設(shè)置RightToLeftLayout屬性,下面的代碼展示了如何為樣例RibbonForm啟用RightToLeft 和RightToLeftLayout 設(shè)置。
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
提示:在運(yùn)行時(shí),對(duì)于已經(jīng)顯示的表單應(yīng)該避免在運(yùn)行時(shí)更改RightToLeft或RightToLeftLayout屬性。
下圖展示了以left-to-right和right-to-left的語(yǔ)言環(huán)境顯示的樣例RibbonForm,注意從右到左區(qū)域設(shè)置的控件布局是鏡像的。
某些控件容器提供自己的RightToLeftLayout設(shè)置來(lái)激活可視化元素和子控件布局鏡像,在大多數(shù)情況下,您需要啟用這些設(shè)置才能正確支持RTL模式。如果控件容器(例如,標(biāo)準(zhǔn)的Windows表單面板)沒(méi)有提供RightToLeftLayout設(shè)置,則根據(jù)目標(biāo)區(qū)域性手動(dòng)安排此容器中的子控件。
默認(rèn)情況下,DevExpress容器控件在RTL模式下自動(dòng)鏡像它們的可視化元素和子控件的布局(當(dāng)表單的 RightToLeft設(shè)置被啟用并且RightToLeftLayout設(shè)置未被設(shè)置為False時(shí))。如果一個(gè)DevExpress控制容器提供了它自己的RightToLeftLayout屬性,您可以將這個(gè)屬性設(shè)置為False來(lái)防止這個(gè)容器的自動(dòng)布局鏡像。以下控件容器提供了它們自己的RightToLeftLayout設(shè)置。
關(guān)于RTL,在表單中使用LayoutControl作為控件容器有幾個(gè)優(yōu)點(diǎn),保持一致的布局并支持RTL模式,當(dāng)表單(或LayoutControl)的RightToLeft 屬性設(shè)置為Yes時(shí),此模式將自動(dòng)為L(zhǎng)ayoutControl激活。下圖顯示了在不同地區(qū)顯示的樣例LayoutControl。
翻譯DevExpress的預(yù)定義字符串
DevExpress控件和組件顯示許多預(yù)定義的字符串常量(例如,列上下文菜單中的文本),默認(rèn)情況下是英文的。您可能希望將這些內(nèi)置字符串轉(zhuǎn)換為自己的語(yǔ)言,這個(gè)機(jī)制在通過(guò)附屬資源程序集本地化WinForms控件文檔中有描述。
本主題中描述的方法使用來(lái)獲取附屬資源程序集,在下載程序集時(shí)找到一個(gè)名稱(chēng)與所需區(qū)域性的縮寫(xiě)相匹配的文件夾(例如,他表示希伯來(lái)文化),并將其復(fù)制到應(yīng)用程序可執(zhí)行文件所在的目錄中,不需要編寫(xiě)任何代碼,因?yàn)閼?yīng)用程序會(huì)自動(dòng)確定當(dāng)前區(qū)域性并在啟動(dòng)時(shí)加載適當(dāng)?shù)某绦蚣?