如何更改子项添加到 wrapPanel 的方向?

How can I change the direction in which children are added to a wrapPanel?

我有一个 WrapPanel,它是 ItemsControl 中许多 TextBlock 的父级。

每个TextBlock显示一个阿拉伯语单词,整体构成一个句子。为了显示句子,我将我的绑定列表放入 ItemsControl 中,这些单词按照阿拉伯语阅读中的顺序(从右到左)。

public UserControl_ArabicVerseSelectable(List<WordInVerse> wordsInVerse)
{
    InitializeComponent();
    List<WordsOfUC> items = new List<WordsOfUC>();
    foreach (WordInVerse word in wordsInVerse)
    {
        items.Add(new WordsOfUC() { Arabic = word.Arabic, WordID = word.WordID });
    }

    items.Reverse();
    ItemControl_Words.ItemsSource = items;
}

WPF:

<ItemsControl x:Name="ItemControl_Words" 
              HorizontalAlignment="Center" 
              Margin="0,10,0,0" >
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel  />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical" 
                        Margin="5,0,5,0">

                <TextBlock Tag="{Binding WordID}" 
                           x:Name="textBlock_arabic" 
                           Text="{Binding Arabic}" 
                           FontSize="40" 
                           HorizontalAlignment="Center" 
                           FontFamily="Noto Naskh Arabic"  
                           Cursor="Hand" 
                           MouseDown="textBlock_arabic_MouseDown"/>
            
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

也就是说:

...word3, word2, word1

问题是当句子在wrapPanel中只有一行时,显示的很好:

但是一旦句子长到两行...

最后一行应该在第一行之上,因为它是句子的开头,但是由于单词是从右到左添加的,所以首先填充第一行,然后只填充第二行。

那么有没有什么方法可以将子项从右到左添加到 WrapPanel 中,或者如果没有,是否有任何方法可以反转 WrapPanel 中的所有行?

将“FlowDirection”样式触发器添加到您的 TextBlock

     <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Vertical" Margin="5,0,5,0">
                <TextBlock Tag="{Binding WordID}" x:Name="textBlock_arabic" Text="{Binding Arabic}" FontSize="40" HorizontalAlignment="Center" 
                 FontFamily="Noto Naskh Arabic"  Cursor="Hand"     
                 MouseDown="textBlock_arabic_MouseDown">
            
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
          <Style.Triggers>
            <Trigger Property="FlowDirection"
                  Value="RightToLeft">
              <Setter Property="TextAlignment"
                  Value="Right" />
            </Trigger>
          </Style.Triggers>
        </Style>
      </TextBlock.Style>

     </TextBlock>

            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>

注意:这是我很久以前的一个项目。