Définir les propriétés de police dans RichTextBox

voix
0

HI, je développe un éditeur à l' aide RichTextBoxde WPF, je dois mettre en œuvre fonction que l' utilisateur peut choisir la police de sélectionner Textsi un texte est sélectionné, si rien est sélectionné, la police doit être définie pour le nouveau texte. Si je mets les propriétés de police (comme FontStyle, FontSize) de RTB dans ce dernier cas , il définira les propriétés pour le texte entier, Comment définir les propriétés de police pour un nouveau texte (si l' utilisateur entrer dans le texte , il viendra avec un nouveau paramètre de police).

Créé 27/08/2009 à 06:58
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
5

J'ai mis en place une barre d'outils qui peut changer la taille de la police, la famille, la couleur, etc. Ce que je trouve est les détails peuvent être difficiles avec le richtextbox WPF. Réglage de la police de sélection a un certain sens, mais il y a aussi les propriétés de police par défaut de la zone de texte, et les propriétés carets actuelles à combattre. Voici ce que j'ai écrit pour l'obtenir à travailler pour la plupart des cas avec la taille de la police. Le processus doit être la même pour fontfamily et fontcolor. J'espère que cela aide.

    public static void SetFontSize(RichTextBox target, double value)
    {
        // Make sure we have a richtextbox.
        if (target == null)
            return;

        // Make sure we have a selection. Should have one even if there is no text selected.
        if (target.Selection != null)
        {
            // Check whether there is text selected or just sitting at cursor
            if (target.Selection.IsEmpty)
            {
                // Check to see if we are at the start of the textbox and nothing has been added yet
                if (target.Selection.Start.Paragraph == null)
                {
                    // Add a new paragraph object to the richtextbox with the fontsize
                    Paragraph p = new Paragraph();
                    p.FontSize = value;
                    target.Document.Blocks.Add(p);
                }
                else
                {
                    // Get current position of cursor
                    TextPointer curCaret = target.CaretPosition;
                    // Get the current block object that the cursor is in
                    Block curBlock = target.Document.Blocks.Where
                        (x => x.ContentStart.CompareTo(curCaret) == -1 && x.ContentEnd.CompareTo(curCaret) == 1).FirstOrDefault();
                    if (curBlock != null)
                    {
                        Paragraph curParagraph = curBlock as Paragraph;
                        // Create a new run object with the fontsize, and add it to the current block
                        Run newRun = new Run();
                        newRun.FontSize = value;
                        curParagraph.Inlines.Add(newRun);
                        // Reset the cursor into the new block. 
                        // If we don't do this, the font size will default again when you start typing.
                        target.CaretPosition = newRun.ElementStart;
                    }
                }
            }
            else // There is selected text, so change the fontsize of the selection
            {
                TextRange selectionTextRange = new TextRange(target.Selection.Start, target.Selection.End);
                selectionTextRange.ApplyPropertyValue(TextElement.FontSizeProperty, value);
            }
        }
        // Reset the focus onto the richtextbox after selecting the font in a toolbar etc
        target.Focus();
    }
Créé 16/11/2010 à 22:33
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more