控制LTR和RTL语言之间的对齐切换

虽然这个问题足以适用于网络,但我特别感兴趣的是WinForms。

应用程序UI在LTR和RTL语言之间切换而不会发生意外。 唯一的障碍是放置与输入控件(如文本框)相关联的标签。

左到右:
左到右

右到左:
右到左

RTL图像上的标签位置也应相应更改。

是否有一种通用的,程序化的方法来实现这一目标?

选项1 – 镜像forms(镜像标题栏)

如果RightToLeftLayoutRightToLeft属性都为true,则将为窗体启用镜像,控件放置和文本流将从右向左。 因此将RightToLeftLayout设置为true并将RightToLeft设置为yes以具有完整的从右到左的布局。

这样,表格标题栏也将被镜像,控制框将显示在左侧。

选项2 – 镜面板(不镜像标题栏)

如果你不喜欢左到右的标题栏和控制框,你应该自己创建你的右到左容器并将控件放入其中,然后将RightToLeftLayout设置为true并将RightToLeft设置为是的,在容器中有一个完整的从右到左的布局而不改变标题栏和控制框的布局:

 using System; using System.ComponentModel; using System.Windows.Forms; public class ExPanel : Panel { const int WS_EX_LAYOUTRTL = 0x400000; const int WS_EX_NOINHERITLAYOUT = 0x100000; private bool rightToLeftLayout = false; [Localizable(true)] public bool RightToLeftLayout { get { return rightToLeftLayout; } set { if (rightToLeftLayout != value) { rightToLeftLayout = value; this.RecreateHandle(); } } } protected override CreateParams CreateParams { get { CreateParams CP; CP = base.CreateParams; if (this.RightToLeftLayout && this.RightToLeft == System.Windows.Forms.RightToLeft.Yes) CP.ExStyle = CP.ExStyle | WS_EX_LAYOUTRTL | WS_EX_NOINHERITLAYOUT; return CP; } } } 

截图

这是选项1的屏幕截图。 查看标题栏左侧的“关闭”按钮:

在此处输入图像描述

以下是选项2的屏幕截图。 查看标题栏右侧的“关闭”按钮:

在此处输入图像描述