製作能夠添加Rule的HyperLink控件

最近在開發InfoPath Form的時候遇到一個需求:需要一個HyperLink,用戶點擊它後,隱藏某些控件。這個小需求卻不能很容易地解決,原因在於InfoPath的HyperLink控件並不支持添加Rule. 如果你研究過InfoPath的Source File,會發現其實在mainifest文件中,並沒有把HyperLink當作控件,所以不可能爲它設置Rule或觸發事件。
 
爲了解決這個需求,最容易想到的就是利用Button來代替HyperLink. 但是用戶卻要求界面上顯示成HyperLink樣式,那麼我們就要將Button格式化成HyperLink樣式。
 
首先,拖動一個Button控件到Form中,並右鍵選擇Border and Shading...
 
 
然後,在設置框中去掉Border, 並把Shading的顏色設爲None.
 
接下來,改變字體顏色並加上下劃線:
 
目前爲止,一切看上去都十分簡單。但是問題很快就來了,當鼠標移動到Button上時,並沒有變成"手"的樣子。爲了達到最佳效果,我決定通過修改xsl文件。至於爲什麼修改xsl文件能夠改變Button的樣式,已經超出了這篇文章的範疇。有興趣的朋友可以去查一下InfoPath的原理,自然明瞭。
 
在菜單中選擇File->Save As Source File...。選擇一個文件夾保存源文件。
在記事本或xml編輯器中打開view1.xsl(或與包含Button的view同名的xsl文件),可以找到類似以下的代碼:
<input style="BORDER-BOTTOM: #808080 6pt; BORDER-LEFT: #808080 6pt; BACKGROUND-COLOR: transparent; COLOR: #0000ff; BORDER-TOP: #808080 6pt; BORDER-RIGHT: #808080 6pt; TEXT-DECORATION: underline" class="langFont" title="" value="Button" type="button" xd:xctname="Button" xd:CtrlId="CTRL1_5" tabIndex="0"/>
 
在style屬性中加入"cursor:hand; "
<input style="cursor:hand; BORDER-BOTTOM: #808080 6pt; BORDER-LEFT: #808080 6pt; BACKGROUND-COLOR: transparent; COLOR: #0000ff; BORDER-TOP: #808080 6pt; BORDER-RIGHT: #808080 6pt; TEXT-DECORATION: underline" class="langFont" title="" value="Button" type="button" xd:xctname="Button" xd:CtrlId="CTRL1_5" tabIndex="0"/>
 
保存後右鍵mainifest.xsf文件,選擇Design. 此時InfoPath會自動讀取所有Source File並顯示成Form. 再選擇File->Save As保存成xsn文件。
此時,再打開Form,當鼠標放到Button上時,會自動變成一個小手。這樣,一個能夠添加Rule並能觸發事件的HyperLink就做出來了。
 
爲了方便,還可以將這種Button做成一個Template Part,以後在設計InfoPath Form的時候就可以直接用了。 附件中是做好的Template Part.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章