読者です 読者をやめる 読者になる 読者になる

日本語を表示する。

Glyphsを使う。

よく紹介されている方法はこの Glyphs を使う方法ですね。

<Glyphs x:Name="output" Fill="#FFFF0000" FontUri="ipag.ttf" FontRenderingEmSize="24" UnicodeString="日本語" />

FontUri にフォントファイル名を指定して UnicodeString に表示する文字を設定します。ちょっとだけだまされそうになるのですが、 Fill ってのは文字色指定です。なのでなにも設定してないと見えなくって表示されてないのかと思ってしまいます。
この Glyphs を使う方法は XAML で書くだけなのでお手軽です。でも、じつは改行ができません。これはちょっと痛いかもです。しかも、やっぱり文字を書きだすのだから TextBlock を使いたくなるってのが人情でしょう(謎)

TextBlockを使う。

ということで TextBlock を使って表示する方法です。

TextBlock には SetFontSource(downloader) っていうメソッドがあるので、それにフォントファイルをダウンロードした Downloader を設定します。で、その後に FontFamily プロパティにダウンロードしたフォントのフォント名を指定します。

まず、 XAML です。

<TextBlock x:Name="output" />

TextBlock で名前だけつけてます。この名前を使って JavaScript からアクセスします。

function loadXaml(s,e){
  var ag = document.getElementById("silverlightControl");
  var downloader = ag.createObject("downloader");
  downloader.addEventListener("completed",downloadComplete);
  downloader.open("get","ipag.ttf");
  downloader.send();
}

上は XAML がロードされたときに呼ばれる関数です。
最初に Silverlight のコントロールを取得して、2行目で Downloader オブジェクトを作成しています。で、3行目ではダウンロードが成功したときに downloadComplete 関数が呼ばれるように設定します。 downloadComplete 関数は後ほど書きます。で、4行目で対象とるフォントファイルを HTTP の GET で取得するように設定しています。最後に send して戻ってくるのを待ちます。

function downloadComplete(s,e){
  var ag = document.getElementById("silverlightControl");
  var output = ag.content.findName("output");
  output.setFontSource(s);
  output.fontFamily = "IPAGothic";
}

で、ダウンロードが完了したら、対象の TextBlock の SetFontSource に対して、ダウンロードした Downloader を設定します。最後に FontFamily でフォント名を指定して、完了。

SetFontSource で TextBlock にフォント設定する方法は、なにか正常に動作しない場合があったような気がします。ちょっとそれは詳しく見てないので、また後日。