예제 #1
0
        //-------------------------------------------------------------------
        //
        //  Private Methods
        //
        //-------------------------------------------------------------------

        #region Private Methods

        // Worker for OnAdd and Add(string).
        // If returnIndex == true, uses the more costly IList.Add
        // to calculate and return the index of the newly inserted
        // Run, otherwise returns -1.
        private int AddText(string text, bool returnIndex)
        {
            if (text == null)
            {
                throw new ArgumentNullException("text");
            }

            // Special case for TextBlock - to keep its simple content in simple state
            if (this.Parent is TextBlock)
            {
                TextBlock textBlock = (TextBlock)this.Parent;
                if (!textBlock.HasComplexContent)
                {
                    textBlock.Text = textBlock.Text + text;
                    return(0); // There's always one implicit Run with simple content, at index 0.
                }
            }

            this.TextContainer.BeginChange();
            try
            {
                Run implicitRun = Run.CreateImplicitRun(this.Parent);
                int index;

                if (returnIndex)
                {
                    index = base.OnAdd(implicitRun);
                }
                else
                {
                    this.Add(implicitRun);
                    index = -1;
                }

                // Set the Text property after inserting the Run to avoid allocating
                // a temporary TextContainer.
                implicitRun.Text = text;

                return(index);
            }
            finally
            {
                this.TextContainer.EndChange();
            }
        }