19

印刷できない文字を表示することを選択したときに、MS Word がレンダリングするように、通常のスペース、改行なしのスペース、およびその他の書式設定文字 (左から右へのマークなど) をレンダリングする方法が必要です。

私は2つのアプローチを試みました:

1) 文字をめったに使用されない文字に置き換えます。動作しますが、この場合、改行不可能なスペースの「改行しない」動作が失われます (また、LTR および RTL マークも機能しなくなります)。

2) カスタムフォントを使用する

ノンブレーク スペースと LTR/RTL マークの特別な動作を保持できますが、何らかの奇妙な理由で、WPF はノンブレーク スペースを通常のスペース グリフでレンダリングします。

WinForms RichTextBox は、同じフォントのテキストを正しくレンダリングします。

この問題は、スペースと非改行スペースに異なるスペース グリフを持つ別のフォントを適用することで解決できますが、グリフを追加しても LTR および RTL マークはまったくレンダリングされません。

「LTR」、「RTL」、「非破壊的」動作を維持しながら、目に見えるグリフでその文字をレンダリングする方法について何か考えはありますか?

4

3 に答える 3

1

今まで同様のことを試したことはありませんでしたが、次の 2 つのオプションが考えられます。

警告 -> 試していません

最初の方法:

  1. UIElement のサブクラスを作成する
  2. Richtextbox の ControlTemplate で Style を取得し、それを App.xaml に追加します
  3. RichTextBox ControlTemplate から Scrollviewer の内部パネル内にサブクラス化された UIElement のインスタンスを追加します。
  4. ControlTemplate の DataBinding (可能な場合) または他の方法で RTBox をクラスの依存関係プロパティで使用できるようにします。
  5. UIElement サブクラスでは、ドキュメントの文字を反復処理します
  6. 遭遇したスペースと改行ごとに Adorner に記号を描画します
  7. RichTextBox を使用して、特定の位置にある文字の Rect を取得します。この四角形を使用してシンボルを配置します。

このメソッドの利点は、明確な分離があり、RTFBox をサブクラス化する必要がないことですが、間隔の幅を操作してより大きなシンボル用のスペースを空けることはできません。また、他の開発者は、その機能を得るためにそのスタイルが必要であることを知る必要があります。

2 番目の方法:

  1. カスタム装飾を作成する
  2. カスタム Adorner で RTBox を装飾する
  3. Adorner から、Child RTBox にアクセスできるはずです。
  4. UIElement サブクラスでは、ドキュメントの文字を反復処理します
  5. 遭遇したスペースと改行ごとにUIElementにシンボルを描画します
  6. RichTextBox を使用して、特定の位置にある文字の Rect を取得できる可能性があることを覚えています。この四角形を使用してシンボルを配置します。

また、RTBox をサブクラス化する必要もありません。また、間隔を調整することもできません。方法 1 とは対照的に、他の開発者はこの機能が追加されたことをすぐに認識します。1 つの欠点は、スクロールも処理する必要があることです。

于 2013-01-22T17:18:22.840 に答える
0

置き換える代わりに、LTR/RTLの表示されているグリフの近くに挿入してみることができます。

于 2012-10-11T07:56:13.023 に答える
0

すべての値を特殊文字として保存します。印刷機能は、a) ユーザーが望む出力の種類、b) データ配列/大量の文字列を解釈し、ユーザーが見たいものに関する値を吐き出す必要があるようです。物がどのように保管されているかについてあまり詳しく説明しませんが、これは非常に合理的な方法です。

于 2012-10-17T16:48:48.587 に答える