2017-02-10 2 views
0

Я хотел бы знать, как рассчитать высоту заданного FontFamily в универсальном приложении Window.Как рассчитать высоту FontFamily в UWP?

В UWP, то FontFamily объект имеет LineSpacing свойство, которое делает возможным вычислить максимальную высоту, чтобы выделить все глифы шрифта, но он не доступен для приложений UWP.

УВЕДОМЛЕНИЕ: О «дублировании претензии», используя TextBlock для измерения высоты, не является для меня вариантом. Помимо уродливого трюка, для этого используется объект UI. В моем случае я не могу этого сделать, потому что сам создаю GUI Framework. Было бы нецелесообразно полагаться на объект внутри самой структуры UWP.

ответ

1

Вы можете использовать метод измерения TextBlock для измерения ширины и высоты. Это своего рода хакерство, но делает эту работу.

private Size MeasureString(string textToMeasure, Size availableSize, double fontSize, string fontFamily) 
{ 
    var tb = new TextBlock(); 

    tb.TextWrapping = TextWrapping.Wrap; 
    tb.Text = textToMeasure; 
    tb.FontFamily = new FontFamily(fontFamily); 
    tb.FontSize = fontSize; 
    tb.Measure(new Size(Double.PositiveInfinity, double.PositiveInfinity)); 

    return new Size(tb.ActualWidth, tb.ActualHeight); 
} 

Трюк здесь заключается в использовании бесконечного размера в методе измерения для получения фактического размера.

Другим жизнеспособным вариантом будет пользовательская библиотека Microsoft Win2D UWP. Он имеет класс CanvasFontFace, который содержит все, что вы ищете. Я лично не использовал его, но он должен работать для ваших целей.

+0

Извините, но это не вариант для меня. Я создаю инфраструктуру графического интерфейса, и я не могу использовать какой-либо собственный элемент управления для его вычисления. – SuperJMN

+0

@SuperJMN Делает смысл. Похоже, я отредактировал свой пост прямо перед тем, как вы прокомментировали. Я добавил еще один вариант, который не использует никаких встроенных элементов управления. – hankide

+0

OK! пожалуйста, обратитесь к моему новому вопросу http://stackoverflow.com/questions/42162481/how-to-calculate-the-height-of-a-fontfamily-with-win2d. Кажется, что класс используется внутри. Я не знаю, как его использовать :((я не могу создать экземпляр его напрямую, и документы не очень много объясняют). – SuperJMN

Смежные вопросы