我正在嘗試使用WrapPanel和兩個TextBlocks將星號(*)附加到某些文本的左側,允許文本換行並強制文本右對齊。我已經成功地完成了創建一個WrapPanel,並將FlowDirection設置爲RightToLeft並添加我的文本,然後添加星號。但是,如果我使用的文本恰好在行的末尾有任何非字母數字字符,它會被莫名地強制到行的前面。我覺得這種行爲很奇怪。我認爲它必須是WPF中的錯誤,而不是預期的行爲。使用WPF WrapPanel環繞和右對齊文本 - WPF Bug?
例與文本=普通文本(其它文本):
Expected:
* Normal Text (Other
Text)
Actual:
* Normal Text (Other
(Text
隨意使用下面的示例代碼重現問題的自己。只需將它放在Height和Width = 100的窗口中,然後在TextBox中輸入「Normal Text(Other Text)」。或者,將「高度」和「寬度」設置爲您喜歡的任何內容,並編寫足夠的文本以強制文本包裝,然後在最後添加標點符號。
示例代碼:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Name="input" />
<WrapPanel Grid.Row="2" FlowDirection="RightToLeft">
<TextBlock Text="{Binding ElementName=input, Path=Text}" TextWrapping="Wrap"/>
<TextBlock Text="*" Margin="0,0,3,0"/>
</WrapPanel>
</Grid>
所以,我的問題(一個或多個)。
- 這是一個錯誤,或者這是打算?
- 如果這是一個錯誤,我應該以某種方式將它提交給微軟嗎?怎麼樣?
自從開始這篇文章後,我決定將兩個TextBlocks放在兩列網格中。將包含TextBlock的非星號配置爲使用正確的TextAlignment,無論如何,我都滿足了我的所有要求。不過,我發現這是一個有趣的問題。
很棒!像我的RightToLeft FlowDirection這樣複雜的邏輯經常出現這種情況,有一種更簡單的方法來做到這一點。我比我描述的網格更喜歡它。 是否值得我的時間向微軟報告這種奇怪的行爲? – Drew 2010-07-20 15:22:34
@Drew看起來像是預期的行爲。正如我所說,我實際上並不知道這件事,但有一點谷歌搜索發現這個鏈接:http://www.i18nguy.com/markup/right-to-left.html – 2010-07-20 16:14:58
我不能說我真的理解將語言從左向右改爲從右向左的規則,但我被賣出這是意圖行爲。做得好。 – Drew 2010-07-20 18:12:57