2016-03-13 19 views
11

Trong WPF, điều này là có thể sử dụng FormattedText, như thế này:Làm cách nào để đo kích thước văn bản trong ứng dụng UWP?

private Size MeasureString(string candidate) 
{ 
    var formattedText = new FormattedText(
     candidate, 
     CultureInfo.CurrentUICulture, 
     FlowDirection.LeftToRight, 
     new Typeface(this.textBlock.FontFamily, this.textBlock.FontStyle, this.textBlock.FontWeight, this.textBlock.FontStretch), 
     this.textBlock.FontSize, 
     Brushes.Black); 

    return new Size(formattedText.Width, formattedText.Height); 
} 

Nhưng trong UWP lớp này không tồn tại nữa. Vậy làm cách nào để tính kích thước văn bản trong nền tảng cửa sổ phổ quát?

Trả lời

23

Trong UWP, bạn tạo một TextBlock, đặt thuộc tính của nó (như Text, FontSize), sau đó gọi phương thức Measure và vượt qua kích thước vô hạn.

var tb = new TextBlock { Text = "Text", FontSize = 10 }; 
tb.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); 

Sau đó thuộc tính DesiredSize của nó có kích thước mà TextBlock sẽ có.

+5

@Reddy Tôi không phải là nhanh (mặc dù tôi ước gì tôi đã). Có hộp kiểm "trả lời câu hỏi của riêng bạn" khi đặt câu hỏi. Tôi đã làm điều này bởi vì tôi không tìm thấy bất kỳ câu hỏi hoặc câu trả lời cho vấn đề này trên SO, để những người khác sẽ tìm thấy nó (hy vọng) và không phải tìm kiếm giờ cho nó. – Domysee

+3

Xin lưu ý rằng điều này không dành riêng cho UWP. Nó cũng sẽ hoạt động tốt trong WPF hoặc Silverlight. – Clemens

+0

@MarcelW Không chắc chắn ý của bạn là gì. Điều đó làm việc tốt cho tôi, cũng trong WPF. – Clemens

0

Dưới đây là một cách tiếp cận khác sử dụng Win2D:

private Size MeasureTextSize(string text, CanvasTextFormat textFormat, float limitedToWidth = 0.0f, float limitedToHeight = 0.0f) 
{ 
    var device = CanvasDevice.GetSharedDevice(); 

    var layout = new CanvasTextLayout(device, text, textFormat, limitedToWidth, limitedToHeight); 

    var width = layout.DrawBounds.Width; 
    var height = layout.DrawBounds.Height; 

    return new Size(width, height); 
} 

Bạn có thể sử dụng nó như thế này:

string text = "Lorem ipsum dolor sit amet"; 

CanvasTextFormat textFormat = new CanvasTextFormat 
{ 
    FontSize = 16, 
    WordWrapping = CanvasWordWrapping.WholeWord, 
}; 

Size textSize = this.MeasureTextSize(text, textFormat, 320.0f); 

Source

Các vấn đề liên quan