有必要支持从右到左的样式(文本和布局)。我了解当您在其继承的所有子控件中设置父Grid
的属性FlowDirection = "RightToLeft"
时。
问题是 - 是否有任何默认设置,这将改变我们在应用程序中所需的一切?或者,如果我们(例如在阿拉伯国家/地区),我应该如何设置每个家长贪婪FlowDirection
并将此旗帜设为FlowDirection = "RightToLeft"
?
答案 0 :(得分:1)
如果你要支持任何左翼语言,那么也需要有一个从右到左的布局。您不需要更改所有元素的FlowDirection属性,因为它是由子元素继承的。
MSDN:
对象从其父级继承FlowDirection值 对象树。任何元素都可以覆盖它从中获取的值 家长。如果未指定,则默认FlowDirection为LeftToRight
所以通常你需要为Window的根元素/框架设置一次属性。
但是,某些元素(如FontIcon和Image)不会自动镜像。 FontIcon有一个MirroredWhenRightToLeft属性:
您可以将MirroredWhenRightToLeft属性设置为具有字形 当FlowDirection为RightToLeft时显示为镜像。你通常 使用FontIcon将图标显示为零件时使用此属性 控件模板和图标需要与镜像一起镜像 其余的控制
对于图像,您需要通过变换翻转图像。
修改强>
您可以在Application类中设置创建主框架/页面的属性:
// Part of the App.xaml.cs in default UWP project template:
protected override void OnLaunched(LaunchActivatedEventArgs e) {
#if DEBUG
if (System.Diagnostics.Debugger.IsAttached) {
this.DebugSettings.EnableFrameRateCounter = true;
}
#endif
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null) {
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame();
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) {
//TODO: Load state from previously suspended application
}
//**********************
// Set flow direction
// *********************
if (System.Globalization.CultureInfo.CurrentCulture.TextInfo.IsRightToLeft) {
rootFrame.FlowDirection = FlowDirection.RightToLeft;
}
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
...
...
如果你不想使用后面的代码(我认为可以在这种情况下使用它),你可以实现IValueConverter(不推荐):
public class RightToLeftConverter : IValueConverter {
public object Convert(object value, Type targetType,
object parameter, string language) {
if (System.Globalization.CultureInfo.CurrentCulture.TextInfo.IsRightToLeft) {
return FlowDirection.RightToLeft;
}
return FlowDirection.LeftToRight;
}
public object ConvertBack(object value, Type targetType,
object parameter, string language)
{
throw new NotImplementedException();
}
}
并在XAML中使用它:
<Page
...
...
FlowDirection="{Binding Converter={StaticResource RightToLeftConverter}}">