在很多情況下,從用戶(hù)體驗(yàn)的角度考慮,我們都希望我們的Silverlight程序能夠適應(yīng)各種大小的瀏覽器窗口或者框架,如圖所示:



那么如何使Silverlight程序能夠自適應(yīng)瀏覽器窗口的大小呢,即使在動(dòng)態(tài)改變?yōu)g覽器窗口的時(shí)候也不例外。Google了幾次,都沒(méi)找到自己所需要的方案,于是只好自己來(lái)解決了。
首先,有沒(méi)有辦法在Silverlight的程序代碼中獲取瀏覽器的高寬呢?這一點(diǎn)似乎沒(méi)法做 到,Application.Current.Host.Content.ActualWidth和 Application.Current.Host.Content.ActualHeight獲取的是插件的高寬。 BrowserInformation對(duì)象獲取的雖然是瀏覽器的信息,但是沒(méi)有高寬。那么可以不可以使用JS獲取瀏覽器高寬呢,這當(dāng)然是可行的。
獲取瀏覽器高寬有了思路,那么怎么讓程序自適應(yīng)呢?于是想到了“window.onresize”事件。這樣,問(wèn)題就解決了,具體代碼如下:
首先,在Silverlight中定義了如下方法:
02 |
/// 設(shè)置控件布局(根據(jù)窗口來(lái)自適應(yīng)) |
05 |
public void SetLayout(string _winWidth, string _winHeight) |
07 |
double _windowWidth = Convert.ToDouble(_winWidth); |
08 |
double _windowHeight = Convert.ToDouble(_winHeight); |
09 |
//設(shè)置滾動(dòng)框?qū)挾?/td>
|
10 |
svPlans.Width = _windowWidth - 8; |
11 |
Canvas.SetLeft(spButtons, _windowWidth - 400); |
12 |
Canvas.SetLeft(txtTitle, _windowWidth / 2 - 150); |
13 |
Canvas.SetZIndex(cvShowProcess, 999); |
14 |
Canvas.SetLeft(cvShowProcess, _windowWidth / 3); |
15 |
Canvas.SetTop(cvShowProcess, 80); |
17 |
svPlans.MaxHeight = _windowHeight - 54; |
該函數(shù)是可以使用JS調(diào)用的,上一篇已經(jīng)說(shuō)明了,這里就略過(guò)了。布局的方法寫(xiě)好了,該寫(xiě)js去調(diào)用了。由于不想每個(gè)頁(yè)面都寫(xiě)調(diào)用的js,于是UserControl_Loaded
事件就辛苦點(diǎn),在里面寫(xiě)下如下代碼
1 |
//JS調(diào)用SetLayout函數(shù)來(lái)設(shè)置控件布局 |
2 |
HtmlPage.Window.Eval(@" |
4 |
function () {slCtl.Content.PlanView.SetLayout(document.documentElement.clientWidth, document.documentElement.clientHeight); |
5 |
window.onresize = function() { |
6 |
slCtl.Content.PlanView.SetLayout(document.documentElement.clientWidth, document.documentElement.clientHeight); |
如此一來(lái),首次加載以及“window.onresize”事件都能夠調(diào)用之前的布局方法實(shí)現(xiàn)自適應(yīng)瀏覽器窗口了
標(biāo)簽:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客園