由於 Silverlight 並沒有中文字型,所以要顯示中文字便比較麻煩。
如果文字的內容是固定,可以用圖形或將文字轉成 path 的方式處理,
若文字是變動性的,甚至是由 user 來輸入,
就必須建立 WCF 由 server 端來處理了。
以下是 Server 端, 將 string 轉成 path 並傳回的方法:
public string GetFont
(string str, string fontFamily, int nSize)
{
Typeface typeface =
new Typeface(new FontFamily(fontFamily),
FontStyles.Normal, FontWeights.Normal,
FontStretches.Normal);
FormattedText text = new FormattedText(str,
new System.Globalization.CultureInfo("zh-tw"),
FlowDirection.LeftToRight, typeface, nSize,
Brushes.Black);
Geometry geo = text.BuildGeometry(new Point(0, 0));
PathGeometry path = geo.GetFlattenedPathGeometry();
string data = path.ToString();
string xamlTriangle = "<Path xmlns='http://schemas.microsoft.com/" +
"winfx/2006/xaml/presentation' " +
"xmlns:x='http://schemas.microsoft.com/" +
"winfx/2006/xaml' " +
"Data='" + data + "' Fill='LightBlue' " +
"Stretch='Fill'/>";
return xamlTriangle;
}
而 Client 的程式如下:
void client_StringToPathCompleted(object sender,
DoWorkCompletedEventArgs e)
{
Path newPath = (Path)
System.Windows.Markup.XamlReader.Load(e.Result);
this.LayoutRoot.Children.Add(newPath);
}
[Reference]
以 WPF + AJAX 在執行期間將文字轉成 Path
In SL3.0, can you not just use XamlReader.Load ?