Распространение букв (отслеживание) с TextBlock в WPF? - PullRequest
3 голосов
/ 09 октября 2010

Каков наилучший способ переноса букв (отслеживания) с помощью TextBlock в WPF?

Я бы подумал, что TextBlock.Typography позаботится об этом, но это не так. Каков наилучший подход?

Ответы [ 2 ]

0 голосов
/ 07 июня 2012

Я использовал подход, предложенный Kreol, и обнаружил, что он работает, за исключением того, что некоторые буквы шире других.

При использовании UniformGrid каждый столбец имеет одинаковую ширину по определению. Это приводит к переменному интервалу между буквами.

Вместо этого я использовал стековую панель с горизонтальной ориентацией и левое поле для каждого элемента:

<Grid>
    <ItemsControl ItemsSource="{Binding SomeString}" HorizontalAlignment="Center" VerticalAlignment="Center">
            <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal" />
                        </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemContainerStyle>
                        <Style>
                            <Setter Property="Control.Margin" Value="1,0,0,0"/>
                            <Setter Property="Control.Foreground" Value="#1E395B"/>
                         </Style>
                </ItemsControl.ItemContainerStyle>
        </ItemsControl>
</Grid>
0 голосов
/ 01 августа 2011

Кажется, что эту проблему нелегко решить. Вы можете гуглить и найти что-то вроде этого http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/789c3e1b-e3ae-476f-b37f-d93ef6d0cb7b/ (подход с глифами). Но принимая во внимание тот факт, что String является перечисляемой коллекцией, иногда вы можете решить вашу проблему с разметкой следующим образом:

<Grid>
    <ItemsControl>
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Rows="1"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemsSource>
            <System:String>
                Hello World
            </System:String>
        </ItemsControl.ItemsSource>
    </ItemsControl>         
</Grid>

Настраивая эту разметку (панели, шаблоны) вы можете получить любой желаемый макет строки. И, конечно, вы можете отделить эту разметку от специального UserControl. Просто как вариант для частных случаев.

...