以下の内容はhttps://7shi.hateblo.jp/entry/20090729/1248796088より取得しました。


UIElementをXAMLで出力

n7shi2009-07-29


UIElementをラスターデータで出力するのにはWriteableBitmapが使えますが、ベクターデータで出力するのにXAMLを使ってみました。サンプルではVisual TreeをTreeViewで表示しているため、コントロールの内部構造と比較できます。 ⇒ 動作確認とソース

Silverlightのコントロールの外観はShapeとTextBlockを組み合わせて表現されています。Visual Treeをたどってそれらを集めれば、見た目は同じXAMLが得られそうです。実験してみたところ、ほぼ同じ見た目のXAMLが出力できました。元のSilverlightと出力したXAMLとの違いは以下の通りです。

  • 見た目だけを再現するため、Panel(Grid/Canvas/Stack)の階層構造は無視してフラットにCanvasに並べています。
  • XAMLを開くとWPFレンダリングされるためフォントが異なります。
  • スクロールバーのボタン(RepeatButton)が消えています。
    • System.Windows.Shapes.PathのDataに含まれるPathGrometryからFiguresが取得できないためです。取得しようとするとFiguresがクリアされてSilverlight上からも消えてしまうため、XAML出力の際にFiguresを無視しています。自前のコードで設定したFiguresではこのような問題はありません。
  • TextBoxの中身が表示されません。
    • TextBoxの内部はMS.Internal.TextBoxViewで行き止まりになっていて、そこから先はたどれないためです。

実際に使うときはSilverlightのコントロールではなく自前で描画したオブジェクトが対象となるはずなので、あまり問題にはならないでしょう。それよりもXAMLが編集できるドローツールがExpression Blendくらいしかない方が問題です。現時点ではXAMLで出力してもあまり使い道がなさそうです。




以上の内容はhttps://7shi.hateblo.jp/entry/20090729/1248796088より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14