Biçimlendirilmiş Metin Çizme

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

Teknolojiye genel bakış

FormattedTextNesnesi, metin içindeki her karakterin ayrı ayrı biçimlendirilebileceği çok satırlı metin çizmenizi sağlar. Aşağıdaki örnek, birkaç biçimin uygulanmış olduğu metni gösterir.

FormattedText nesnesi kullanılarak görünen metin

Not

Win32 API geçiş yapan geliştiriciler için, Win32 geçiş bölümündeki tablo Win32 DrawText bayraklarını ve içindeki yaklaşık eşdeğerini listeler Windows Presentation Foundation (WPF) .

Biçimli metin kullanma nedenleri

WPF ekrana metin çizme için birden çok denetim içerir. Her denetim farklı bir senaryoya yöneliktir ve kendi özellik ve kısıtlama listesine sahiptir. Genel olarak, TextBlock öğesinde kısa bir cümle gibi sınırlı metin desteği gerektiğinde öğesi kullanılmalıdır kullanıcı arabirimi (UI) . Label en az metin desteği gerekli olduğunda kullanılabilir. Daha fazla bilgi için bkz. WPF Içindeki belgeler.

FormattedTextNesnesi metin denetimlerinden daha fazla metin biçimlendirme özelliği sağlar Windows Presentation Foundation (WPF) ve metni dekoratif bir öğe olarak kullanmak istediğiniz durumlarda yararlı olabilir. Daha fazla bilgi için, biçimlendirilen metni bir geometriye dönüştürmeninaşağıdaki bölümüne bakın.

Ayrıca, FormattedText nesnesi metin odaklı türetilmiş nesneler oluşturmak için faydalıdır DrawingVisual . DrawingVisual şekilleri, resimleri veya metni işlemek için kullanılan basit bir çizim sınıfıdır. Daha fazla bilgi için bkz. Drawinggörselleri kullanarak Isabet testi örneği.

FormattedText nesnesini kullanma

Biçimlendirilen metin oluşturmak için, FormattedText bir nesnesi oluşturmak için oluşturucuyu çağırın FormattedText . İlk biçimlendirilmiş metin dizesini oluşturduktan sonra bir dizi biçimlendirme stili uygulayabilirsiniz.

MaxTextWidthMetni belirli bir genişliğe kısıtlamak için özelliğini kullanın. Metin, belirtilen genişliği aşmaktan kaçınmak için otomatik olarak kaydırılır. MaxTextHeightMetni belirli bir yüksekliğe kısıtlamak için özelliğini kullanın. Metinde "..." üç nokta görüntülenir belirtilen yüksekliği aşan metin için.

WordWrap ve üç nokta ile görünen metin.

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

Aşağıdaki kod örneği bir nesnesi oluşturur FormattedText ve sonra metne birkaç biçimlendirme stili 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

Uygulamalarda diğer metin nesnelerinde olduğu gibi Windows Presentation Foundation (WPF) , nesne, FormattedText ölçü birimi olarak cihazdan bağımsız pikseller kullanır. Ancak, çoğu Win32 uygulaması, ölçü birimi olarak noktaları kullanır. Görüntüleme metnini uygulamalarda punto birimlerinde kullanmak istiyorsanız Windows Presentation Foundation (WPF) , cihazdan bağımsız birimleri (birim başına 1/96th) noktalara dönüştürmeniz gerekir. Aşağıdaki kod örneği, bu dönüştürmenin nasıl gerçekleştirileceğini gösterir.

// 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çimlendirilen metni bir geometriye dönüştürme

Biçimlendirilen metni Geometry nesnelerine dönüştürebilirsiniz, böylece görsel açıdan ilgi çekici metin türlerini oluşturabilirsiniz. Örneğin, bir Geometry metin dizesinin ana hattını temel alan bir nesne oluşturabilirsiniz.

Doğrusal gradyan fırçası kullanan metin ana hattı

Aşağıdaki örneklerde, dönüştürülmüş metnin vuruş, dolgusu ve vurgulanmasını değiştirerek ilginç görsel etkiler oluşturmanın birkaç yolu gösterilmektedir.

Fill ve Stroke için farklı renkler içeren metin

Görüntüye resim fırçası uygulanmış metin

Kontura ve vurgulamaya uygulanan resim fırçasının bulunduğu metin

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 Fill ö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ını ifade eder; Fill, dönüştürülen metnin ana hattının içindeki alanı ifade eder. Daha fazla bilgi için bkz. anahatları belirlenmiş metin oluşturma.

Ayrıca, biçimlendirilen metni bir PathGeometry nesneye dönüştürebilir ve nesneyi metin vurgulamak için kullanabilirsiniz. Örneğin, PathGeometry animasyonun biçimli metnin ana hattını takip edebilmesi için nesnesine bir animasyon uygulayabilirsiniz.

Aşağıdaki örnek, bir nesnesine dönüştürülen biçimlendirilmiş metni gösterir PathGeometry . Hareketli bir elips, işlenen metnin vuruşlarının yolunu izler.

Metnin yol geometrisini izleyen Sphere
Metnin yol geometrisini izleyen Sphere

Daha fazla bilgi için bkz. nasıl yapılır: metin Için PathGeometry animasyonu oluşturma.

Biçimlendirilmiş metin için, bir nesnesine dönüştürüldükten sonra başka ilginç kullanımlar oluşturabilirsiniz PathGeometry . Örneğin, video görüntüsünü, içinde görüntülenecek şekilde kırpabilirsiniz.

Metnin yol geometrisi içinde görüntülenen video

Win32 geçişi

FormattedTextÇizim metni için özellikleri, Win32 DrawText işlevinin özelliklerine benzerdir. Win32 API geçiş yapan geliştiriciler için aşağıdaki tabloda Win32 DrawText bayrakları ve içindeki yaklaşık eşdeğeri listelenmektedir Windows Presentation Foundation (WPF) .

DrawText bayrağı WPF eşdeğeri Notlar
DT_BOTTOM Height HeightUygun bir Win32 DrawText ' y ' konumunu hesaplamak için özelliğini kullanın.
DT_CALCRECT Height, Width Height Width Çıkış dikdörtgenini hesaplamak için ve özelliklerini kullanın.
DT_CENTER TextAlignment TextAlignmentÖzelliğini olarak ayarlanan değerle kullanın Center .
DT_EDITCONTROL Yok Gerekli değildir. Boşluk genişliği ve son satır işleme, çerçeve düzenleme denetimindeki ile aynıdır.
DT_END_ELLIPSIS Trimming TrimmingÖzelliğini değeriyle kullanın CharacterEllipsis .

WordEllipsisDT_WORD_ELIPSIS uç üç nokta Ile Win32 DT_END_ELLIPSIS almak için kullanın — Bu durumda, karakter üç nokta yalnızca tek bir satıra sığmayan sözcüklerde oluşur.
DT_EXPAND_TABS Yok Gerekli değildir. Sekmeler, 8 dilden bağımsız karakterlerin yaklaşık genişliği olan her 4 EMS 'yi durdurmak üzere otomatik olarak genişletilir.
DT_EXTERNALLEADING Yok Gerekli değildir. Dış lider her zaman satır aralığına dahildir. LineHeightKullanıcı tanımlı satır aralığı oluşturmak için özelliğini kullanın.
DT_HIDEPREFIX Yok Desteklenmez. Nesneyi oluşturmadan önce dizeden ' & ' öğesini kaldırın FormattedText .
DT_LEFT TextAlignment Bu, varsayılan metin hizalamasıdır. TextAlignmentÖzelliğini olarak ayarlanan değerle kullanın Left . (Yalnızca WPF)
DT_MODIFYSTRING Yok Desteklenmez.
DT_NOCLIP VisualClip Kırpma otomatik olarak gerçekleşmez. Metni kırpmak istiyorsanız VisualClip özelliğini kullanın.
DT_NOFULLWIDTHCHARBREAK Yok Desteklenmez.
DT_NOPREFIX Yok Gerekli değildir. Dizelerdeki ' & ' karakteri her zaman normal karakter olarak değerlendirilir.
DT_PATHELLIPSIS Yok TrimmingÖzelliğini değeriyle kullanın WordEllipsis .
DT_PREFIX Yok Desteklenmez. Bir Hızlandırıcı tuşu veya bağlantı gibi metin için alt çizgi kullanmak istiyorsanız SetTextDecorations yöntemini kullanın.
DT_PREFIXONLY Yok Desteklenmez.
DT_RIGHT TextAlignment TextAlignmentÖzelliğini olarak ayarlanan değerle kullanın Right . (Yalnızca WPF)
DT_RTLREADING FlowDirection FlowDirectionÖzelliğini olarak ayarlayın RightToLeft .
DT_SINGLELINE Yok Gerekli değildir. FormattedTextMaxTextWidthözellik ayarlanmamışsa ya da metin bir satır başı/satır besleme (CR/LF) içermiyorsa, nesneler tek satırlık bir denetim gibi davranır.
DT_TABSTOP Yok Kullanıcı tanımlı sekme durağı konumları desteği yok.
DT_TOP Height Gerekli değildir. En üstteki gerekçe varsayılandır. Diğer dikey konumlandırma değerleri, Height uygun bir Win32 DrawText ' y ' konumunu hesaplamak için özelliği kullanılarak tanımlanabilir.
DT_VCENTER Height HeightUygun bir Win32 DrawText ' y ' konumunu hesaplamak için özelliğini kullanın.
DT_WORDBREAK Yok Gerekli değildir. Sözcük bölünmesi, nesnelerle otomatik olarak gerçekleşir FormattedText . Devre dışı bırakılamıyor.
DT_WORD_ELLIPSIS Trimming TrimmingÖzelliğini değeriyle kullanın WordEllipsis .

Ayrıca bkz.