FrameworkElement.FlowDirection 属性

定义

获取或设置文本和其他 UI 元素在控制其布局的任何父元素中的流动方向。 此属性可以设置为 LeftToRightRightToLeft。 在任何元素上将 FlowDirection 设置为 RightToLeft 会将对齐方式设置为右对齐,将读取顺序设置为从右到左,并将控件的布局设置为从右到左流动。

public:
 property FlowDirection FlowDirection { FlowDirection get(); void set(FlowDirection value); };
FlowDirection FlowDirection();

void FlowDirection(FlowDirection value);
public FlowDirection FlowDirection { get; set; }
var flowDirection = frameworkElement.flowDirection;
frameworkElement.flowDirection = flowDirection;
Public Property FlowDirection As FlowDirection
<frameworkElement FlowDirection="flowDirectionMemberName"/>

属性值

文本和其他 UI 元素在其父元素中流动的方向,作为 枚举的值。 默认值为 LeftToRight

示例

此 XAML 示例演示布局容器(如 Grid )如何解释 RightToLeft 的值。 如果查看此 XAML 生成的 UI,“Chartreuse”矩形将显示在右上角,而不是在 FlowDirection 为默认 LeftToRight 时显示的左上角。

<Grid FlowDirection="RightToLeft">
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Rectangle Fill="Chartreuse" Width="30" Height="30"/>
    <Rectangle Grid.Row="1" Fill="Purple" Width="30" Height="30"/>
    <Rectangle Grid.Column="1" Fill="Pink" Width="30" Height="30"/>
    <Rectangle Grid.Row="1" Grid.Column="1" Fill="Orange" Width="30" Height="30"/>
</Grid>

注解

FlowDirection 旨在支持应用的从右到左布局。 基本上,将 FlowDirection 设置为 RightToLeft 应生成适当的从右到左行为,并呈现应用它的任何 XAML 控件。 特定 XAML 控件可能在其模板或逻辑中具有进一步的处理,这些模板或逻辑响应本主题中未提及的 RightToLeft 的 FlowDirection,这些 XAML 控件的参考主题中可能会对此进行说明。

对象从对象树中的父级继承 FlowDirection 值。 任何元素都可以重写它从其父元素获取的值。 如果未指定,则默认 FlowDirectionLeftToRight

如果对象上的 FlowDirection 值为 RightToLeft则 FrameworkElement 的某些值和行为将更改:

  • 在 元素中,参考坐标框架水平翻转,以便“ (0, 0) ”为右上角。 这会影响命中测试 API 返回的值,例如 FindElementsInHostCoordinates
  • 如果 FrameworkElementPath 或其他 形状,则其视觉内容水平翻转。
  • 对于布局容器,参考的坐标框架会更改。 Canvas 中的“ (0, 0) ”是右上角。 Grid 中用于 Grid.Column 的“0”列是最右侧的列。
  • 在控件的模板组合中,应用相同的布局更改。 例如,如果将 RadioButton 的 FlowDirection 设置为 RightToLeft,可单击按钮图形将显示在文本标签内容的右侧,因为 RadioButton 模板中的 Grid 现在将“0”视为最右侧的列,并且文本标签右对齐。
  • 映像 具有特殊行为,请参阅下面的“图像的 FlowDirection”部分。

如果 FlowDirection 为 RightToLeft,则 TextBlockTextBox 等文本容器中的文本不会水平翻转,整个字符串、单个字符或字形都不会翻转。 InlineCollectionInline 元素的顺序也不会更改。 这样就可以在从右到左的应用中混合内容,例如在阿拉伯语 UI 中包含有意的英语字符串。 任何旨在用作文本容器的文本源的字符串(其中预期语言为从右到左的语言)都应以适当的 Unicode 表示形式指定该字符串,该表示形式将在文本容器中正确显示。 但是,文本容器中作为 RightToLeft 的 FlowDirection 值确实会更改默认 的 TextAlignment 值,使文本的右边缘与文本容器边界右对齐。

FlowDirection 对 字形 元素中的文本没有明显影响,但会更改元素的命中测试和坐标参照系。

Image 和 MediaElement 的 FlowDirection

如果将 FlowDirection 设置为 ImageRightToLeft,则图像的视觉内容将水平翻转。 但是, Image 元素不会从任何父元素继承 FlowDirection 值。 通常,你只需要与布局相关的图像中的图像翻转行为,但不一定与具有嵌入文本的元素或其他对从右到左的受众没有意义的翻转组件。 若要获取图像翻转行为,必须将 Image 元素上的 FlowDirection 元素专门设置为 RightToLeft,或在代码隐藏中设置 FlowDirection 属性。 请考虑通过 x:Uid 指令标识 Image 元素,并将 FlowDirection 值指定为 RESW 资源,以便本地化专家以后无需更改 XAML 或代码即可更改此值。

MediaElement 也不会从任何父元素继承 FlowDirection 值。 如果在 MediaElement 上将 FlowDirection 显式设置为 RightToLeft,则媒体视图区域将水平翻转,类似于图像翻转的方式。 故意执行此操作应该比 Image 更罕见,因为本地化内容中使用的任何媒体源很可能已在源媒体文件中更正了任何从右到左的问题。

WebView 和 WebViewBrush 的 FlowDirection

WebViewWebViewBrush 不会将任何从右到左的信息提升为 HTML 的加载方式。 如果 HTML 内容中有任何从左到右的注意事项,请考虑在 WebView 元素上设置 x:Uid 指令,并将任何 WebView.Source 统一资源标识符 (URI) 值指定为字符串形式的 RESW 资源。 WebViewWebViewBrush 也不会从任何父元素继承 FlowDirection。 在 WebViewWebViewBrush 上设置 FlowDirection 不会导致异常,但运行时会忽略你设置的任何值。

适用于

另请参阅