Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ve většině případů při přidávání ornamentů do textových řetězců v aplikaci Windows Presentation Foundation (WPF) používáte text z hlediska kolekce diskrétních znaků nebo glyfů. Můžete například vytvořit lineární gradientový štětec a použít ho na Foreground vlastnost TextBox objektu. Při zobrazení nebo úpravě textového pole se štětce lineárního přechodu automaticky použije na aktuální sadu znaků v textovém řetězci.
Můžete ale také převést text na objekty Geometry, což vám umožní vytvářet další typy vizuálně formátovaného textu. Můžete například vytvořit objekt Geometry na základě obrysu textového řetězce.
Když je text převeden na objekt Geometry, už se nejedná o kolekci znaků – znaky v textovém řetězci nelze upravovat. Můžete ovlivnit vzhled převedeného textu úpravou jeho vlastností tahu a výplně. Tah odkazuje na obrys převedeného textu; výplň odkazuje na oblast uvnitř obrysu převedeného textu.
Následující příklady ilustrují několik způsobů vytváření vizuálních efektů úpravou tahu a výplně převedeného textu.
Obdélník ohraničujícího rámečku nebo zvýraznění převedeného textu je také možné upravit. Následující příklad ukazuje způsob, jak vytvořit vizuální efekty úpravou tahu a zvýraznění převedeného textu.
Příklad
Klíčem k převodu textu na objekt Geometry je použití objektu FormattedText. Po vytvoření tohoto objektu můžete pomocí BuildGeometry a BuildHighlightGeometry metod převést text na objekty Geometry. První metoda vrátí geometrii formátovaného textu; druhá metoda vrátí geometrii ohraničujícího pole formátovaného textu. Následující příklad kódu ukazuje, jak vytvořit objekt FormattedText a načíst geometrie formátovaného textu a jeho ohraničujícího pole.
/// <summary>
/// Create the outline geometry based on the formatted text.
/// </summary>
public void CreateText()
{
System.Windows.FontStyle fontStyle = FontStyles.Normal;
FontWeight fontWeight = FontWeights.Medium;
if (Bold == true) fontWeight = FontWeights.Bold;
if (Italic == true) fontStyle = FontStyles.Italic;
// Create the formatted text based on the properties set.
FormattedText formattedText = new FormattedText(
Text,
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface(
Font,
fontStyle,
fontWeight,
FontStretches.Normal),
FontSize,
System.Windows.Media.Brushes.Black // This brush does not matter since we use the geometry of the text.
);
// Build the geometry object that represents the text.
_textGeometry = formattedText.BuildGeometry(new System.Windows.Point(0, 0));
// Build the geometry object that represents the text highlight.
if (Highlight == true)
{
_textHighLightGeometry = formattedText.BuildHighlightGeometry(new System.Windows.Point(0, 0));
}
}
''' <summary>
''' Create the outline geometry based on the formatted text.
''' </summary>
Public Sub CreateText()
Dim fontStyle As FontStyle = FontStyles.Normal
Dim fontWeight As FontWeight = FontWeights.Medium
If Bold = True Then
fontWeight = FontWeights.Bold
End If
If Italic = True Then
fontStyle = FontStyles.Italic
End If
' Create the formatted text based on the properties set.
Dim formattedText As New FormattedText(Text, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, New Typeface(Font, fontStyle, fontWeight, FontStretches.Normal), FontSize, Brushes.Black) ' This brush does not matter since we use the geometry of the text.
' Build the geometry object that represents the text.
_textGeometry = formattedText.BuildGeometry(New Point(0, 0))
' Build the geometry object that represents the text highlight.
If Highlight = True Then
_textHighLightGeometry = formattedText.BuildHighlightGeometry(New Point(0, 0))
End If
End Sub
Pokud chcete zobrazit načtené objekty Geometry, musíte získat přístup k DrawingContext objektu, který zobrazuje převedený text. V těchto příkladech kódu se tento přístup dosahuje vytvořením vlastního řídicího objektu odvozeného z třídy, která podporuje uživatelem definované vykreslování.
Chcete-li zobrazit Geometry objekty ve vlastním ovládacím prvku, je třeba přepsat metodu OnRender. Přepsaná metoda by měla použít metodu DrawGeometry k vykreslení Geometry objektů.
/// <summary>
/// OnRender override draws the geometry of the text and optional highlight.
/// </summary>
/// <param name="drawingContext">Drawing context of the OutlineText control.</param>
protected override void OnRender(DrawingContext drawingContext)
{
// Draw the outline based on the properties that are set.
drawingContext.DrawGeometry(Fill, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textGeometry);
// Draw the text highlight based on the properties that are set.
if (Highlight == true)
{
drawingContext.DrawGeometry(null, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textHighLightGeometry);
}
}
''' <summary>
''' OnRender override draws the geometry of the text and optional highlight.
''' </summary>
''' <param name="drawingContext">Drawing context of the OutlineText control.</param>
Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext)
' Draw the outline based on the properties that are set.
drawingContext.DrawGeometry(Fill, New Pen(Stroke, StrokeThickness), _textGeometry)
' Draw the text highlight based on the properties that are set.
If Highlight = True Then
drawingContext.DrawGeometry(Nothing, New Pen(Stroke, StrokeThickness), _textHighLightGeometry)
End If
End Sub
Zdroj ukázkového objektu vlastního uživatelského ovládacího prvku naleznete v tématu OutlineTextControl.cs pro jazyk C# a OutlineTextControl.vb pro Visual Basic.
Viz také
.NET Desktop feedback