Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I de flesta fall när du lägger till prydnad i textsträngar i ditt WPF-program (Windows Presentation Foundation) använder du text i form av en samling diskreta tecken eller glyfer. Du kan till exempel skapa en linjär gradientpensel och tillämpa den på egenskapen Foreground för en TextBox objekt. När du visar eller redigerar textrutan tillämpas den linjära toningspenseln automatiskt på den aktuella uppsättningen tecken i textsträngen.
Men du kan också konvertera text till Geometry-objekt, vilket låter dig skapa andra typer av visuellt rika texter. Du kan till exempel skapa ett Geometry objekt baserat på konturen av en textsträng.
När text konverteras till ett Geometry objekt är det inte längre en samling tecken– du kan inte ändra tecknen i textsträngen. Du kan dock påverka utseendet på den konverterade texten genom att ändra dess linje- och fyllningsegenskaper. Strecket refererar till konturen av den konverterade texten; fyllningen syftar på området inuti konturen för den konverterade texten.
I följande exempel visas flera sätt att skapa visuella effekter genom att ändra linje och fyllning av konverterad text.
Det går också att ändra rektangeln för avgränsningsrutan eller markera den konverterade texten. I följande exempel visas ett sätt att skapa visuella effekter genom att ändra streck och markeringar av konverterad text.
Exempel
Nyckeln till att konvertera text till ett Geometry objekt är att använda objektet FormattedText. När du har skapat det här objektet kan du använda metoderna BuildGeometry och BuildHighlightGeometry för att konvertera texten till Geometry objekt. Den första metoden returnerar geometrin för den formaterade texten. den andra metoden returnerar geometrin för den formaterade textens avgränsningsruta. I följande kodexempel visas hur du skapar ett FormattedText objekt och hämtar geometrierna för den formaterade texten och dess avgränsningsruta.
/// <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
För att kunna visa de hämtade Geometry objekten måste du komma åt DrawingContext för objektet som visar den konverterade texten. I dessa kodexempel uppnås den här åtkomsten genom att skapa ett anpassat kontrollobjekt som härleds från en klass som stöder användardefinierad återgivning.
Om du vill visa Geometry objekt i den anpassade kontrollen anger du en åsidosättning för metoden OnRender. Den åsidosatta metoden bör använda DrawGeometry-metoden för att rendera objekt Geometry.
/// <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
Källan till exempelobjektet för anpassad användarkontroll finns i OutlineTextControl.cs för C# och OutlineTextControl.vb för Visual Basic.
Se även
.NET Desktop feedback