Я пытаюсь использовать WrapPanel и два TextBlocks, чтобы добавить звездочку (*) к левой стороне некоторого текста, разрешить перенос текста и принудительно выровнять текст по правому краю. Я успешно сделал это, создав WrapPanel с FlowDirection, установленным на RightToLeft, и добавив свой текст со звездочкой. Однако, если текст, который я использую, содержит какие-либо не буквенно-цифровые символы в конце строки, он необъяснимым образом помещается в начало строки. Я считаю такое поведение очень странным. Я думаю, что это ошибка в WPF, а не предполагаемое поведение.
Пример с текстом = нормальный текст (другой текст):
Expected:
* Normal Text (Other
Text)
Actual:
* Normal Text (Other
(Text
Не стесняйтесь использовать следующий пример кода, чтобы воссоздать проблему самостоятельно. Просто поместите это в окно с высотой и шириной = 100, затем введите «Обычный текст (другой текст)» в текстовое поле. Или установите для высоты и ширины все, что вам нравится, и напишите достаточно текста, чтобы он был вынужден обернуть текст, а затем добавьте знаки препинания в конце.
Образец кода:
<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>
Итак, мой вопрос (ы).
- Это ошибка или это задумано?
- Если это ошибка, следует ли мне каким-то образом отправить ее в Microsoft? Как?
Начиная с этого поста, я решил вместо этого поместить два TextBlocks в сетку из двух столбцов. С не-звездочкой, содержащей TextBlock, настроенной на использование Right TextAlignment, я в любом случае удовлетворяю всем своим требованиям. Тем не менее, я нашел это интересным вопросом.