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