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.

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.

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.

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.



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
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.

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 . |