Aracılığıyla paylaş


Biçimlendirilmiş Metin Çizme

Bu konu, nesnenin özelliklerine FormattedText genel bir bakış sağlar. Bu nesne, Windows Presentation Foundation (WPF) uygulamalarında metin çizmek için alt düzey denetim sağlar.

Teknolojiye Genel Bakış

FormattedText nesnesi, metindeki her karakterin ayrı ayrı biçimlendirilebildiği çok satırlı metin çizmenize olanak tanır. Aşağıdaki örnekte, çeşitli biçimler uygulanmış metin gösterilmektedir.

Text displayed using FormattedText object

Dekont

Win32 API'sinden geçiş yapan geliştiriciler için Win32 Geçişi bölümündeki tabloda Win32 DrawText bayrakları ve Windows Presentation Foundation'daki (WPF) yaklaşık eşdeğeri listelenir.

Biçimlendirilmiş Metin Kullanmanın Nedenleri

WPF, ekrana metin çizmek için birden çok denetim içerir. Her denetim farklı bir senaryoya hedeflenmiştir ve kendi özellik ve sınırlama listesine sahiptir. Genel olarak, kullanıcı arabirimindeki TextBlock (UI) kısa bir cümle gibi sınırlı metin desteği gerektiğinde öğesi kullanılmalıdır. Label en az metin desteği gerektiğinde kullanılabilir. Daha fazla bilgi için bkz . WPF'deki Belgeler.

nesnesi, FormattedText Windows Presentation Foundation (WPF) metin denetimlerinden daha büyük metin biçimlendirme özellikleri sağlar ve metni dekoratif öğe olarak kullanmak istediğiniz durumlarda yararlı olabilir. Daha fazla bilgi için aşağıdaki Biçimlendirilmiş Metni Geometriye Dönüştürme bölümüne bakın.

Buna ek olarak, FormattedText nesne metin odaklı DrawingVisualtüretilmiş nesneler oluşturmak için kullanışlıdır. DrawingVisual şekilleri, resimleri veya metinleri işlemek için kullanılan basit bir çizim sınıfıdır. Daha fazla bilgi için bkz . Çizim Kullanarak İsabet TestiVisuals Örneği.

FormattedText Nesnesini Kullanma

Biçimlendirilmiş metin oluşturmak için oluşturucuyu çağırarak FormattedText bir FormattedText nesne oluşturun. İlk biçimlendirilmiş metin dizesini oluşturduktan sonra, bir biçimlendirme stilleri aralığı uygulayabilirsiniz.

MaxTextWidth Metni belirli bir genişliğe sınırlamak için özelliğini kullanın. Metin, belirtilen genişliği aşmamak için otomatik olarak kaydırılır. MaxTextHeight Metni belirli bir yüksekliğe sınırlamak için özelliğini kullanın. Metinde "..." adlı üç nokta görüntülenir belirtilen yüksekliği aşan metin için.

Text displayed with wordwrap and ellipsis.

Bir veya daha fazla karaktere birden çok biçimlendirme stili uygulayabilirsiniz. Örneğin, metindeki SetFontSize ilk beş karakterin biçimlendirmesini değiştirmek için hem ve SetForegroundBrush yöntemlerini çağırabilirsiniz.

Aşağıdaki kod örneği bir FormattedText nesne oluşturur ve sonra metne çeşitli biçimlendirme stilleri uygular.

protected override void OnRender(DrawingContext drawingContext)
{
    string testString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor";

    // Create the initial formatted text string.
    FormattedText formattedText = new FormattedText(
        testString,
        CultureInfo.GetCultureInfo("en-us"),
        FlowDirection.LeftToRight,
        new Typeface("Verdana"),
        32,
        Brushes.Black);

    // Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
    formattedText.MaxTextWidth = 300;
    formattedText.MaxTextHeight = 240;

    // Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
    // The font size is calculated in terms of points -- not as device-independent pixels.
    formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);

    // Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
    formattedText.SetFontWeight(FontWeights.Bold, 6, 11);

    // Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
    formattedText.SetForegroundBrush(
                            new LinearGradientBrush(
                            Colors.Orange,
                            Colors.Teal,
                            90.0),
                            6, 11);

    // Use an Italic font style beginning at the 28th character and continuing for 28 characters.
    formattedText.SetFontStyle(FontStyles.Italic, 28, 28);

    // Draw the formatted text string to the DrawingContext of the control.
    drawingContext.DrawText(formattedText, new Point(10, 0));
}
Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext)
    Dim testString As String = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"

    ' Create the initial formatted text string.
    Dim formattedText As New FormattedText(testString, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, New Typeface("Verdana"), 32, Brushes.Black)

    ' Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
    formattedText.MaxTextWidth = 300
    formattedText.MaxTextHeight = 240

    ' Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
    ' The font size is calculated in terms of points -- not as device-independent pixels.
    formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5)

    ' Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
    formattedText.SetFontWeight(FontWeights.Bold, 6, 11)

    ' Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
    formattedText.SetForegroundBrush(New LinearGradientBrush(Colors.Orange, Colors.Teal, 90.0), 6, 11)

    ' Use an Italic font style beginning at the 28th character and continuing for 28 characters.
    formattedText.SetFontStyle(FontStyles.Italic, 28, 28)

    ' Draw the formatted text string to the DrawingContext of the control.
    drawingContext.DrawText(formattedText, New Point(10, 0))
End Sub

Yazı Tipi Boyutu Ölçü Birimi

Windows Presentation Foundation (WPF) uygulamalarındaki diğer metin nesnelerinde olduğu gibi, FormattedText nesne de ölçü birimi olarak cihazdan bağımsız pikseller kullanır. Ancak, çoğu Win32 uygulaması ölçü birimi olarak noktaları kullanır. Windows Presentation Foundation (WPF) uygulamalarında görüntüleme metnini nokta birimlerinde kullanmak istiyorsanız, cihazdan bağımsız birimleri (birim başına 1/96 inç) noktalara dönüştürmeniz gerekir. Aşağıdaki kod örneğinde bu dönüştürmenin nasıl gerçekleştirebileceğiniz gösterilmektedir.

// The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);
' The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5)

Biçimlendirilmiş Metni Geometriye Dönüştürme

Biçimlendirilmiş metni nesnelere Geometry dönüştürerek diğer görsel olarak ilginç metin türlerini oluşturmanıza olanak sağlayabilirsiniz. Örneğin, bir Geometry metin dizesinin ana hattını temel alan bir nesne oluşturabilirsiniz.

Text outline using a linear gradient brush

Aşağıdaki örneklerde, dönüştürülen metnin vuruşunu, dolgusunu ve vurgularını değiştirerek ilginç görsel efektler oluşturmanın çeşitli yolları gösterilmektedir.

Text with different colors for fill and stroke

Text with image brush applied to stroke

Text with image brush applied to stroke and highlight

Metin bir Geometry nesneye dönüştürüldüğünde, artık bir karakter koleksiyonu değildir; metin dizesindeki karakterleri değiştiremezsiniz. Ancak, kontur ve dolgu özelliklerini değiştirerek dönüştürülen metnin görünümünü etkileyebilirsiniz. Vuruş, dönüştürülen metnin ana hattına başvurur; dolgu, dönüştürülen metnin ana hattının içindeki alanı ifade eder. Daha fazla bilgi için bkz . Ana Hatlı Metin Oluşturma.

Ayrıca, biçimlendirilmiş metni bir PathGeometry nesneye dönüştürebilir ve metni vurgulamak için nesnesini kullanabilirsiniz. Örneğin, nesneye animasyon uygulayarak animasyonun PathGeometry biçimlendirilmiş metnin ana hattını takip edebilmesini sağlayabilirsiniz.

Aşağıdaki örnekte, nesneye PathGeometry dönüştürülmüş biçimlendirilmiş metin gösterilmektedir. Animasyonlu üç nokta, işlenen metnin vuruşlarının yolunu izler.

Sphere following the path geometry of text
Metnin yol geometrisini izleyen küre

Daha fazla bilgi için bkz . Nasıl yapılır: Metin için PathGeometry Animasyonu Oluşturma.

Nesneye dönüştürüldükten PathGeometry sonra biçimlendirilmiş metin için başka ilginç kullanımlar da oluşturabilirsiniz. Örneğin, videoda görüntülemek için video kırpabilirsiniz.

Video displaying in the path geometry of text

Win32 Geçişi

Metin çizme özellikleri FormattedText , Win32 DrawText işlevinin özelliklerine benzer. Win32 API'sinden geçiş yapan geliştiriciler için aşağıdaki tabloda Win32 DrawText bayrakları ve Windows Presentation Foundation'daki (WPF) yaklaşık eşdeğeri listelenir.

DrawText bayrağı WPF eşdeğeri Notlar
DT_BOTTOM Height Height Uygun bir Win32 DrawText 'y' konumunu hesaplamak için özelliğini kullanın.
DT_CALCRECT Height, Width Çıkış dikdörtgenini Height hesaplamak için ve Width özelliklerini kullanın.
DT_CENTER TextAlignment değerinin TextAlignment olarak ayarlandığı Centerözelliğini kullanın.
DT_EDITCONTROL Hiçbiri Gerekli değil. Alan genişliği ve son satır işleme, çerçeve düzenleme denetimindekiyle aynıdır.
DT_END_ELLIPSIS Trimming Trimming değeriyle CharacterEllipsisözelliğini kullanın.

DT_WORD_ELIPSIS uç üç nokta içeren Win32 DT_END_ELLIPSIS almak için kullanın WordEllipsis ; bu durumda, karakter üç noktası yalnızca tek bir satıra sığmayan sözcüklerde oluşur.
DT_EXPAND_TABS Hiçbiri Gerekli değil. Sekmeler, yaklaşık 8 dilden bağımsız karakterin genişliği olan her 4 em'yi durduracak şekilde otomatik olarak genişletilir.
DT_EXTERNALLEADING Hiçbiri Gerekli değil. Dış satır aralığı her zaman satır aralığına eklenir. LineHeight Kullanıcı tanımlı satır aralığı oluşturmak için özelliğini kullanın.
DT_HIDEPREFIX Hiçbiri Desteklenmiyor. Nesneyi oluşturmadan önce dizeden '&' öğesini FormattedText kaldırın.
DT_LEFT TextAlignment Bu, varsayılan metin hizalamasıdır. değerinin TextAlignment olarak ayarlandığı Leftözelliğini kullanın. (yalnızca WPF)
DT_MODIFYSTRING Hiçbiri Desteklenmiyor.
DT_NOCLIP VisualClip Kırpma otomatik olarak gerçekleşmez. Metni kırpmak istiyorsanız özelliğini kullanın VisualClip .
DT_NOFULLWIDTHCHARBREAK Hiçbiri Desteklenmiyor.
DT_NOPREFIX Hiçbiri Gerekli değil. Dizelerdeki '&' karakteri her zaman normal bir karakter olarak değerlendirilir.
DT_PATHELLIPSIS Hiçbiri Trimming değeriyle WordEllipsisözelliğini kullanın.
DT_PREFIX Hiçbiri Desteklenmiyor. Metin için kısayol tuşu veya bağlantı gibi alt çizgiler kullanmak istiyorsanız yöntemini kullanın SetTextDecorations .
DT_PREFIXONLY Hiçbiri Desteklenmiyor.
DT_RIGHT TextAlignment değerinin TextAlignment olarak ayarlandığı Rightözelliğini kullanın. (yalnızca WPF)
DT_RTLREADING FlowDirection FlowDirection özelliğini RightToLeft olarak ayarlayın.
DT_SINGLELINE Hiçbiri Gerekli değil. FormattedText nesneleri, özellik ayarlanmadığı veya metin satır başı/satır beslemesi (CR/LF) içermediği sürece MaxTextWidth tek satır denetimi olarak davranır.
DT_TABSTOP Hiçbiri Kullanıcı tanımlı sekme durağı konumları için destek yok.
DT_TOP Height Gerekli değil. Üst gerekçe varsayılandır. Diğer dikey konumlandırma değerleri, uygun bir Win32 DrawText 'y' konumunu hesaplamak için özelliği kullanılarak Height tanımlanabilir.
DT_VCENTER Height Height Uygun bir Win32 DrawText 'y' konumunu hesaplamak için özelliğini kullanın.
DT_WORDBREAK Hiçbiri Gerekli değil. Sözcük kesme nesneleriyle FormattedText otomatik olarak gerçekleşir. Devre dışı bırakamazsınız.
DT_WORD_ELLIPSIS Trimming Trimming değeriyle WordEllipsisözelliğini kullanın.

Ayrıca bkz.