我有一個whichWrapPanel是許多TextBlock.ItemsControl
每個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從右到左添加孩子,或者如果沒有,有沒有辦法反轉 a 中的所有行WrapPanel?
uj5u.com熱心網友回復:
將“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>
注意:我很久以前就拿過這個專案了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/441703.html
