另類的Silverlight中文解法

2021-04-16 14:19:06 字數 3980 閱讀 8586

另類的silverlight中文解法

/黃忠成

如你所知,由於字型的關係,

silverlight

目前對於雙位元文字顯示可說是困難重重,大概可歸類出兩種解法,一種是下載字型到客戶端,一種是利用

blend2

將文字變成圖形,下載字型目前有法律問題的隱憂,而且乙個中文字庫大小約

5mb,仍嫌過大。在上次嘗試實作

databinding

功能後,心中就有一種想法,假如於

server

端將文字轉成圖形後下載到客戶端,那麼因為不是直接下載字型,所以應無法律問題

(這我不確定!

),也不會因下載整個字型檔而導致網頁開啟速度過慢,這樣是否就能讓前次的

data bindigns

例子支援中文的顯示呢?可惜前幾天因陪老婆考試,一直沒時間來實現心中的構想,這幾天終於有時間來實現這個架構了。基本上,實現這個架構有兩個問題必須先行解決,第乙個問題是

server

端如何將文字變成圖形?這不難,下列的程式便可辦到。

protected

void page_load(object sender, eventargs e)

else

if (request.querystring["transform"] != null)

else

response.end();}}

}private

void resolveparams(string transformparams, out

int index, out

string column)

}private

memorystream resolvetransform(object data, string column)

private

memorystream getdbcsjpestream(string str, font font, color forecolor,

color

background, int width, int height)

如果你仔細看上面的程式,會發覺其中有字型預設的問題,若要以此觀念實作乙個完整的架構,關於字型的資訊應於

xaml

中指定才好,不過目前我只是展示這個想法的可行性,就先放著這部份不理了。第二個要解決的問題是如何於

xaml

中指定data bindings

資訊,這點不難,依據前版以

tag來指定

binding expression

的概念,只需加油添醋一番,即可套用。

請注意,由於採圖形方式的緣故,這裡已不再使用

textblock

,而是使用

image

控制項來顯示,

sldh.js

也需稍做修改。 /

// silverlight data binding helper 0.1

/if(!window.silverlightbinding)

window.silverlightbinding = {};

silverlightbinding.bindingdata = function(ctrl,bindingexpression,context)

if(temp[0] == 'bindingfield')

this.bindingfield = temp[1];

else

if(temp[0] == 'bindingproperty')

this.bindingproperty = temp[1];

else

if(temp[0] == 'format')

this.format = temp[1];  

}this.bindingcomplete = true;

}silverlightbinding.bindingdata.prototype =

',dataitem."+this.bindingfield+');');                                

if(this.format.indexof("index") != -1)

str = str.replace("",this.context.currentdataindex);

if(this.format.indexof("bindingfield") != -1)

str = str.replace("",this.bindingfield);

eval('this.ctrl.'+this.bindingproperty+" = str;");

}else

eval('this.ctrl.'+this.bindingproperty+' = dataitem.'+this.bindingfield+';');}}

}silverlightbinding.bindingcontext = function(bindingcontainer)}}

if(!this.bindingcomplete) alert('error,binding failed.');

}silverlightbinding.bindingcontext.prototype =

else

delete bindingdata;

}try

catch(err)

for(var i = 0; i < parent.children.count; i++)

this._childworker(parent.children.getitem(i),true);

}  

},initialize:function()

,onsucceeded: function(result, usercontext, methodname)

else

if(methodname == usercontext.bindingcountmethod)

usercontext.recordcount = result;

},         

onfailed:function(error, usercontext, methodname)

},_receivedata: function(index)

,_receivecount: function()

,next:function()

,prev:function()

}下圖為執行例。

後記

這種方式僅是乙個應急的解法,畢竟傳輸圖形也是需要時間的,自然不比直接使用位於客戶端的字型來的有效率。

示例下載:

另類的Silverlight中文解法

另類的silverlight中文解法 文 黃忠成 如你所知,由於字型的關係,silverlight 目前對於雙位元文字顯示可說是困難重重,大概可歸類出兩種解法,一種是下載字型到客戶端,一種是利用 blend2 將文字變成圖形,下載字型目前有法律問題的隱憂,而且乙個中文字庫大小約 5mb,仍嫌過大。在...

另類的Silverlight中文解法

另類的silverlight中文解法 文 黃忠成 如你所知,由於字型的關係,silverlight 目前對於雙位元文字顯示可說是困難重重,大概可歸類出兩種解法,一種是下載字型到客戶端,一種是利用 blend2 將文字變成圖形,下載字型目前有法律問題的隱憂,而且乙個中文字庫大小約 5mb,仍嫌過大。在...

另類的Silverlight中文解法

另類的silverlight中文解法 文 黃忠成 如你所知,由於字型的關係,silverlight 目前對於雙位元文字顯示可說是困難重重,大概可歸類出兩種解法,一種是下載字型到客戶端,一種是利用 blend2 將文字變成圖形,下載字型目前有法律問題的隱憂,而且乙個中文字庫大小約 5mb,仍嫌過大。在...