• <menu id="w2i4a"></menu>
  • logo DevExpress WinForm中文手冊

    文檔首頁>>DevExpress WinForm中文手冊>>如何在從右向左區(qū)域性應(yīng)用程序中啟用RTL模式

    如何在從右向左區(qū)域性應(yīng)用程序中啟用RTL模式


    立即下載DevExpress WinForms

    本主題展示如何在使用單個從右向左(RTL)區(qū)域性的應(yīng)用程序中啟用從右向左模式。

    表單設(shè)置類:全局設(shè)置

    WindowsFormsSettings類公開了靜態(tài)屬性,這些屬性指定了所有DevExpress WinForms控件通用的各種全局設(shè)置,包括RTL設(shè)置。

    我們建議您通過RightToLeft和RightToLeftLayout屬性來啟用RTL設(shè)置,但是如果應(yīng)用程序沒有本地化并且主要使用DevExpress控件,也可以使用WindowsFormsSettings.RightToLeftWindowsFormsSettings.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)的下拉按鈕。

    1

    您可以在設(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è)置。

    關(guān)于RTL,在表單中使用LayoutControl作為控件容器有幾個優(yōu)點(diǎn),LayoutControl保持一致的布局并支持RTL模式,當(dāng)表單(或LayoutControl)的RightToLeft 屬性設(shè)置為Yes時,此模式將自動為LayoutControl激活。下圖顯示了在不同地區(qū)顯示的樣例LayoutControl。

    DevExpress VCL圖表控件

    翻譯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ù)某绦蚣?

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();