0

TextFormatter を使用して、次のサンプル コードを示すMSDN の記事に出くわしました。

// Create a TextFormatter object.
TextFormatter formatter = TextFormatter.Create();

// Create common paragraph property settings.
CustomTextParagraphProperties customTextParagraphProperties
    = new CustomTextParagraphProperties();

// Format each line of text from the text store and draw it.
while (textStorePosition < customTextSource.Text.Length)
{
    // Create a textline from the text store using the TextFormatter object.
    using (TextLine myTextLine = formatter.FormatLine(
        customTextSource,
        textStorePosition,
        96 * 6,
        customTextParagraphProperties,
        null))
    {
        // Draw the formatted text into the drawing context.
        myTextLine.Draw(drawingContext, linePosition, InvertAxes.None);

        // Update the index position in the text store.
        textStorePosition += myTextLine.Length;

        // Update the line position coordinate for the displayed line.
        linePosition.Y += myTextLine.Height;
    }
}

私が抱えている問題は、参照した後でもSystem.Windows.Media.TextFormatting使用するクラス/オブジェクトがないCustomTextParagraphPropertiesため、行がエラーをスローすることです(もちろん存在しないため)

このクラスにアクセスするには、他に何を参照する必要がありますか?

これは私のusingリストです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using System.Drawing.Printing;
using System.ComponentModel;
using System.Windows.Media.TextFormatting;
using System.IO;

そして、これは私の参考文献のリストです:

参考文献

私は見つけましTextParagraphPropertiesたが、これはabstractクラスであるためnew、を使用して作成することはできません。つまり、例が示すように、代わりにドロップするものではありませんCustomTextParagraphProperties。次の行は機能しません。

TextParagraphProperties tp = new TextParagraphProperties();

注: このプロジェクトは WPF 機能を継承しているため、WPF タグを追加しましたが、これは WPF プロジェクトではありません。

私はうさぎの穴を掘り下げ始めabstract、親が依存する共依存クラスをますます見つけnewました。オブジェクトを初期化するために を使用できないため、終わりが見えずにたくさんのコードを書かなければなりません。これはかなりイライラしています。 :

#region textformatter
    class TextRunProperties : System.Windows.Media.TextFormatting.TextRunProperties {
        public override Windows.Media.Brush BackgroundBrush { get; set; }
        public override Windows.BaselineAlignment BaselineAlignment { get { return base.BaselineAlignment; } }
        public override CultureInfo CultureInfo { get; set; }
        public override double FontHintingEmSize { get; set; }
        public override double FontRenderingEmSize { get; set; }
        public override Windows.Media.Brush ForegroundBrush { get; set; }
        public override Windows.Media.NumberSubstitution NumberSubstitution { get { return base.NumberSubstitution; } }
        public override TextDecorationCollection TextDecorations { get; set; }
        public override Windows.Media.TextEffectCollection TextEffects { get; set; }
        public override Windows.Media.Typeface Typeface { get; set; }
        public override Windows.Media.TextFormatting.TextRunTypographyProperties TypographyProperties { get { return base.TypographyProperties; } }
    }

    class TextRun : System.Windows.Media.TextFormatting.TextRun {
        public override CharacterBufferReference CharacterBufferReference { get; set; }
        public override int Length { get; set; }
        public override Windows.Media.TextFormatting.TextRunProperties Properties { get; set; }
    }

    class TextSource : System.Windows.Media.TextFormatting.TextSource {
        public override Windows.Media.TextFormatting.TextSpan<CultureSpecificCharacterBufferRange> GetPrecedingText( int textSourceCharacterIndexLimit ) {
            return new TextSpan<CultureSpecificCharacterBufferRange>(
                textSourceCharacterIndexLimit,
                new CultureSpecificCharacterBufferRange(
                    new CultureInfo(0),
                    Windows.Media.TextFormatting.CharacterBufferRange.Empty
                )
            );
        }

        public override int GetTextEffectCharacterIndexFromTextSourceCharacterIndex( int textSourceCharacterIndex ) {
            return 0;
        }

        public override Windows.Media.TextFormatting.TextRun GetTextRun( int textSourceCharacterIndex ) {
            return new TextRun();
        }
    }

    class TextFormatter : System.Windows.Media.TextFormatting.TextFormatter {
        public override Windows.Media.TextFormatting.TextLine FormatLine( Windows.Media.TextFormatting.TextSource textSource, int firstCharIndex, double paragraphWidth, TextParagraphProperties paragraphProperties, TextLineBreak previousLineBreak, TextRunCache textRunCache ) {
            throw new NotImplementedException();
        }

        public override Windows.Media.TextFormatting.TextLine FormatLine( Windows.Media.TextFormatting.TextSource textSource, int firstCharIndex, double paragraphWidth, TextParagraphProperties paragraphProperties, TextLineBreak previousLineBreak ) {
            throw new NotImplementedException();
        }

        public override Windows.Media.TextFormatting.MinMaxParagraphWidth FormatMinMaxParagraphWidth( Windows.Media.TextFormatting.TextSource textSource, int firstCharIndex, TextParagraphProperties paragraphProperties ) {
            throw new NotImplementedException();
        }

        public override Windows.Media.TextFormatting.MinMaxParagraphWidth FormatMinMaxParagraphWidth( Windows.Media.TextFormatting.TextSource textSource, int firstCharIndex, TextParagraphProperties paragraphProperties, TextRunCache textRunCache ) {
            throw new NotImplementedException();
        }

    }

    class TextLine : System.Windows.Media.TextFormatting.TextLine {
        public override double Baseline {
            get { throw new NotImplementedException(); }
        }

        public override int DependentLength {
            get { throw new NotImplementedException(); }
        }

        public override double Extent {
            get { throw new NotImplementedException(); }
        }
        public override bool HasCollapsed {
            get { throw new NotImplementedException(); }
        }
        public override bool HasOverflowed {
            get { throw new NotImplementedException(); }
        }

        public override double Height {
            get { throw new NotImplementedException(); }
        }

        public override bool IsTruncated {
            get {
                return base.IsTruncated;
            }
        }

        public override int Length {
            get { throw new NotImplementedException(); }
        }

        public override double MarkerBaseline {
            get { throw new NotImplementedException(); }
        }
        public override double MarkerHeight {
            get { throw new NotImplementedException(); }
        }
        public override int NewlineLength {
            get { throw new NotImplementedException(); }
        }
        public override double OverhangAfter {
            get { throw new NotImplementedException(); }
        }
        public override double OverhangLeading {
            get { throw new NotImplementedException(); }
        }
        public override double OverhangTrailing {
            get { throw new NotImplementedException(); }
        }
        public override double Start {
            get { throw new NotImplementedException(); }
        }
        public override double TextBaseline {
            get { throw new NotImplementedException(); }
        }
        public override double TextHeight {
            get { throw new NotImplementedException(); }
        }
        public override int TrailingWhitespaceLength {
            get { throw new NotImplementedException(); }
        }
        public override double Width {
            get { throw new NotImplementedException(); }
        }
        public override double WidthIncludingTrailingWhitespace {
            get { throw new NotImplementedException(); }
        }

        // functions
        public override Windows.Media.TextFormatting.TextLine Collapse( params TextCollapsingProperties[] collapsingPropertiesList ) {
            throw new NotImplementedException();
        }
        public override void Draw( DrawingContext drawingContext, Windows.Point origin, InvertAxes inversion ) {
            throw new NotImplementedException();
        }
        public override CharacterHit GetBackspaceCaretCharacterHit( CharacterHit characterHit ) {
            throw new NotImplementedException();
        }

        public override CharacterHit GetCharacterHitFromDistance( double distance ) {
            throw new NotImplementedException();
        }
        public override double GetDistanceFromCharacterHit( CharacterHit characterHit ) {
            throw new NotImplementedException();
        }
        public override IEnumerable<IndexedGlyphRun> GetIndexedGlyphRuns() {
            throw new NotImplementedException();
        }
        public override CharacterHit GetNextCaretCharacterHit( CharacterHit characterHit ) {
            throw new NotImplementedException();
        }
        public override CharacterHit GetPreviousCaretCharacterHit( CharacterHit characterHit ) {
            throw new NotImplementedException();
        }
        public override IList<TextBounds> GetTextBounds( int firstTextSourceCharacterIndex, int textLength ) {
            throw new NotImplementedException();
        }
        public override IList<TextCollapsedRange> GetTextCollapsedRanges() {
            throw new NotImplementedException();
        }
        public override TextLineBreak GetTextLineBreak() {
            throw new NotImplementedException();
        }
        public override IList<TextSpan<Windows.Media.TextFormatting.TextRun>> GetTextRunSpans() {
            throw new NotImplementedException();
        }
    }

#endregion

それが正しいかどうかさえわかりませんが、どうやら、これらのmust overrideメソッドはどれも何も返さないので、このクラスは正確に何をしますか? TextEffect を取得するなどのコードをイベント処理しますか、それともこれはすべて手書きで書かなければならないものですか?何もしない ....

4

1 に答える 1

0

要件に応じて、独自のクラスを派生させTextParagraphProperties、プロパティをオーバーライドする必要があります

public class CustomTextParagraphProperties  : TextParagraphProperties{...}

また、独自の値を導出TextRunPropertiesTextMarkerPropertiesて返す必要があります。

public class CustomTextRunProperties : TextRunProperties{...}
public class CustomTextMarkerProperties : TextMarkerProperties{...}
于 2016-04-07T05:44:59.380 に答える