Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In de meeste gevallen gebruikt u, wanneer u siertekenreeksen toevoegt aan teksttekenreeksen in uw WPF-toepassing (Windows Presentation Foundation), tekst in termen van een verzameling discrete tekens of glyphs. U kunt bijvoorbeeld een lineaire verloopborstel maken en deze toepassen op de eigenschap Foreground van een TextBox-object. Wanneer u het tekstvak weergeeft of bewerkt, wordt de lineaire verloopborstel automatisch toegepast op de huidige set tekens in de tekenreeks.
U kunt echter ook tekst converteren naar Geometry objecten, zodat u andere typen visueel opgemaakte tekst kunt maken. U kunt bijvoorbeeld een Geometry object maken op basis van de omtrek van een tekenreeks.
Wanneer tekst wordt geconverteerd naar een Geometry-object, is het geen verzameling tekens meer. U kunt de tekens in de tekenreeks niet wijzigen. U kunt echter van invloed zijn op het uiterlijk van de geconverteerde tekst door de eigenschappen van de lijn en opvulling te wijzigen. De omtrek verwijst naar de rand van de geconverteerde tekst; de opvulling verwijst naar het gebied binnen de omtrek van de geconverteerde tekst.
In de volgende voorbeelden ziet u verschillende manieren om visuele effecten te maken door de lijn en opvulling van geconverteerde tekst te wijzigen.
Het is ook mogelijk om de rechthoek van het begrenzingsvak of de markering van de geconverteerde tekst te wijzigen. In het volgende voorbeeld ziet u een manier om visuele effecten te maken door de lijn en markering van geconverteerde tekst te wijzigen.
Voorbeeld
De sleutel voor het converteren van tekst naar een Geometry object is het gebruik van het FormattedText-object. Nadat u dit object hebt gemaakt, kunt u de methoden BuildGeometry en BuildHighlightGeometry gebruiken om de tekst te converteren naar Geometry objecten. De eerste methode retourneert de geometrie van de opgemaakte tekst; de tweede methode retourneert de geometrie van het begrenzingsvak van de opgemaakte tekst. In het volgende codevoorbeeld ziet u hoe u een FormattedText-object maakt en de geometrieën van de opgemaakte tekst en het begrenzingsvak ervan ophaalt.
/// <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
Als u de opgehaalde Geometry objecten wilt weergeven, moet u toegang krijgen tot de DrawingContext van het object dat de geconverteerde tekst weergeeft. In deze codevoorbeelden wordt deze toegang bereikt door een aangepast besturingsobject te maken dat is afgeleid van een klasse die door de gebruiker gedefinieerde rendering ondersteunt.
Als u Geometry objecten in het aangepaste besturingselement wilt weergeven, biedt dan een overschrijving voor de methode OnRender. Je overridden methode moet de DrawGeometry methode gebruiken om de Geometry objecten te renderen.
/// <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
Zie OutlineTextControl.cs voor C# en OutlineTextControl.vb voor Visual Basicvoor de bron van het aangepaste gebruikersbeheerobject.
Zie ook
.NET Desktop feedback