powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Text
10 сообщений из 10, страница 1 из 1
Text
    #38963520
AderAder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Есть проблема - на форме есть TextBlock, к нему применяется TextDecoration (пунктирная линия подчеркивания), проблема в том, что начало линии выходит за границы текста на 2 пикселя, в конце текста заканчивается нормально. Как сделать, что бы линия не выходила за пределы текста по горизонтали?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
var myPen = new Pen
            {
                Brush = Brushes.Green,
                Thickness = 1,
                DashStyle = DashStyles.Dot,
                StartLineCap = PenLineCap.Round,
                EndLineCap = PenLineCap.Round
                
            };
 var myUnderline = new TextDecoration { Location = TextDecorationLocation.Underline };
var myPen = new Pen
            {
                Brush = brush,
                Thickness = 1,
                DashStyle = DashStyles.Dot,
                StartLineCap = PenLineCap.Round,
                EndLineCap = PenLineCap.Round
                
            };
myUnderline.PenOffset = 1;
myUnderline.Pen = myPen;
myUnderline.PenThicknessUnit = TextDecorationUnit.Pixel;
...
Рейтинг: 0 / 0
Text
    #38963701
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AderAder,

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    <Grid Background="Gray">
        <TextBlock Text="OrderDate" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center" Background="White">
            <TextBlock.TextDecorations>
                <TextDecoration Location="Underline" PenOffset="1" PenThicknessUnit="Pixel">
                    <TextDecoration.Pen>
                        <Pen Brush="Green" Thickness="1" DashStyle="{x:Static DashStyles.Dot}" StartLineCap="Round" EndLineCap="Round" />
                    </TextDecoration.Pen>
                </TextDecoration>
            </TextBlock.TextDecorations>
        </TextBlock>
    </Grid>

лично у меня всё нормально отображается. Возможно это особенности шрифта, отсутствие кернинга, вот буква и выступает вперёд, так как по бокам у неё отступы.
По моему автор "упоротый перфекционист" :)
Проверьте границы элемента (как у меня отобразите его с фоном на другом фоне. Будет чётко видно, где начинается и где заканчивается граница. Так же стоит проверить пробелы в Text, которые могут быть вначале строки.
...
Рейтинг: 0 / 0
Text
    #38963890
AderAder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,
Мне лично пофиг на вот эту линию, но заказчик расстраивается и просит что бы небыло. Пробелы тыщу раз проверял( А шрифт используется Microsoft Sans Serif размерностью 12.
...
Рейтинг: 0 / 0
Text
    #38963922
AderAder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, а вот если нарисовать фон у TextBlock - он получается сдвинутым влево на 1 пиксель
...
Рейтинг: 0 / 0
Text
    #38963938
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AderAderRoman Mejtes, а вот если нарисовать фон у TextBlock - он получается сдвинутым влево на 1 пиксель
через WPF шпион посмотрите свойство Padding у этого TextBlock, возможно какой то общий стиль применяется к TextBlock'У
или через Binding просто выведите куда то значение свойства.
...
Рейтинг: 0 / 0
Text
    #38964229
AderAder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, паддинг 0, посторонних стилей нет, это я в первую очередь посмотрел((
...
Рейтинг: 0 / 0
Text
    #38964602
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AderAderRoman Mejtes, а вот если нарисовать фон у TextBlock - он получается сдвинутым влево на 1 пиксель
Вали всё на баги отрисовки. Так заказчику и объясни. Или поменяй шрифт на похожий. У WPF достаточно багов отрисовки - тебе что, править их все?

Например, Windows 7, отключи Aero, отключи сглаживание шрифтов (хотя, возможно, и при нём работает) в винде и в WPF (свойство контрола TextOptions.TextFormattingMode="Display"), оставь дефолтный шрифт и его размер. Кидай на окно кнопку с любой надписью. Затем жмакай на кнопку и наблюдай, как надпись на ней мгновенно становится размытой и за секунду вновь становится чёткой. Подобное же наблюдал и при движении в списках. Подобное же наблюдал во флеше. Кто знает, может, алгоритм выравнивания по пиксельной сетке какой-то итерационный и отрабатывает несколько кадров, прежде, чем он выравняет как надо. А может, ещё что-то. Можно копаться и тратить время. А можно забить.

Вот , например.
...
Рейтинг: 0 / 0
Text
    #38964609
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112,

есть хорошая статья " Откуда "мыло" в WPF и как с ним бороться " по этой теме.
...
Рейтинг: 0 / 0
Text
    #38964743
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikAlexey2112,

есть хорошая статья " Откуда "мыло" в WPF и как с ним бороться " по этой теме.
У меня по ссылке немного другое. Это не статичная картинка, а динамика. Т. е. когда сдвигаешь что-то (двигаешь список, жмёшь на кнопку, ещё что-то, где есть текст), что с настройками чёткости сделано, то оно потом сразу становится замыленным, а потом относительно долго (за несколько десятков кадров) становится опять чётким.

Вообще, всё это "мыло" и "привязка к пикселям" лечится просто увеличенными раза так в два плотностью пикселей и, соответственно, размером элементов. "Ретина" и всё такое. Эппл, вон, не смогла придумать нормальный алгоритм делания шрифтов чёткими и просто увеличила плотность пикселов и продолжила "сглаживать" свои шрифты.


А совсем уж вообще, мне вот эти тонкие настройки "чтобы было круто" не сдались никак. Если нет одной настройки "сделать круто", то лазить там чего-то ради выравнивания одного пикселя - работка для идиотов. Проще заказчика убедить, что "так и надо" и "ничего поделать нельзя". Навряд ли он отменит заказ и найдёт тех, кто будет ему пиксели высчитывать, зато от тупого головняка вы избавитесь.
...
Рейтинг: 0 / 0
Text
    #38964749
AderAder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petalvik,

этот материал я прочитал в первую очередь. С мылом то я как раз разобрался - это было самым простым.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Text
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]