Silverlight Tips(1)
??????? 到年底了,手頭上的任務(wù)暫時(shí)也告一段落,公司的產(chǎn)品Web端最近升級(jí)到了SL4,終于可以完全脫離了用VS08開發(fā)時(shí)沒(méi)有可視化設(shè)計(jì)器所受到的折磨。
利用年前這幾天空閑時(shí)間,將平時(shí)遇到的問(wèn)題和在網(wǎng)絡(luò)上看到的整理整理,就算是對(duì)知識(shí)的整合吧。
?????? DataPicker的水印處理
???????
????? 如果你想改變這里水印的內(nèi)容,或許這并不是太容易實(shí)現(xiàn)的,在DatePicker控件內(nèi)容有一個(gè)類型為DatePickerTextBox的部件公開了一個(gè)Watermark屬性
[TemplatePart(Name = "TextBox", Type = typeof (DatePickerTextBox))] public class DatePicker : Control???? 那么改變這個(gè)水印最容易的方式,就是從繼承DataPicker繼承,并重寫OnApplyTemplate()即可
public class MyDatePicker:DatePicker { public override void OnApplyTemplate() { base.OnApplyTemplate(); DatePickerTextBox datePickerTextBox = base.GetTemplateChild("TextBox") as DatePickerTextBox; datePickerTextBox.Watermark = "選擇日期..."; } }????? 把這個(gè)控件放到頁(yè)面中,你會(huì)看到這樣的效果
??????????
???? 如果你想根據(jù)設(shè)置DatePicker格式提示用戶輸入,可以簡(jiǎn)單的改變下上面的代碼
public override void OnApplyTemplate() { base.OnApplyTemplate(); DatePickerTextBox datePickerTextBox = base.GetTemplateChild("TextBox") as DatePickerTextBox; string formatString = String.Empty; if (this.SelectedDateFormat == DatePickerFormat.Short) formatString = "mm/d/yyyy"; if(this.SelectedDateFormat == DatePickerFormat.Long) formatString = "dddd,MMMM,dd,yyyy"; datePickerTextBox.Watermark = "請(qǐng)輸入:(" +formatString+")"; }???? 這時(shí)候效果圖是這樣的:
????????? ??
??? 不過(guò)用上面這種方式,只能保證第一次顯示這樣的效果,換言之,當(dāng)你輸入一個(gè)值并刪除它時(shí),水印信息將顯示原來(lái)的值。
???? FallbackValue屬性
???? 在sl4中,Bind添加了多個(gè)屬性,FallbackValue是用來(lái)設(shè)定當(dāng)綁定的字段不存在時(shí),UI上顯示的內(nèi)容
<TextBlock Text="{Binding Path=Name,FallbackValue='無(wú)效值'}"/>????? 當(dāng)綁定源不存在Name屬性時(shí),TextBlock就會(huì)顯示“無(wú)效值”。
????? StringFormat與CurrentCulture??
?????? 在SL3中如果要改變顯示字符串的格式只能通過(guò)IValueConverter來(lái)實(shí)現(xiàn),在SL4 中綁定提供了StringFormat屬性簡(jiǎn)化了這部分的工作:
<TextBlock Text="{Binding Path=Data,StringFormat=Now is \{0:G\}}" /> <TextBlock Text="{Binding Path=Data,StringFormat=Now is \{0:yyyy-M-dd\}}" /> <TextBlock Text="{Binding Path=Data,StringFormat='Now is {0:yyyy-M-dd}'}" />????? StringFormat屬性設(shè)置了綁定對(duì)象的格式
?????
???? 這里主要是涉及一下多語(yǔ)言的時(shí)候StringFomat不能正確的顯示對(duì)應(yīng)的文化格式,首先將情景重現(xiàn)下:
????? 將當(dāng)前文化與時(shí)間綁定到頁(yè)面上:
<TextBlock Text="{Binding Path=Data,StringFormat=Now is: \{0:G\}}" /> <TextBlock Text="{Binding Path=Name,StringFormat='CultureInfo Name is: {0}'}" />??? 這時(shí)界面上顯示的結(jié)果如下:
???????
??? 可以看到當(dāng)前文化是zh-CN,現(xiàn)在我們?cè)O(shè)置另一種文化,這里簡(jiǎn)單一點(diǎn),不必通過(guò)語(yǔ)言包的形式,只在aspx頁(yè)面上的<object/>里添加culture/uiculture參數(shù)即可
<param name="culture" value="zh-TW" />??? 這時(shí)候你會(huì)看到頁(yè)面顯示如下:
??????
?? 很明顯,盡管系統(tǒng)已經(jīng)識(shí)別了不同的環(huán)境,但是StringFormat并沒(méi)有顯示的出相應(yīng)的時(shí)間格式
?? 這里通過(guò)在頁(yè)面構(gòu)造函數(shù)中添加如下代碼:
this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);???? 代碼就是將當(dāng)前文化設(shè)置為UI語(yǔ)言,這時(shí)你看到的頁(yè)面將會(huì)是這樣的:
??
?? 明顯的,這時(shí)候StringFormat可以自動(dòng)的改變格式了。
?? 在網(wǎng)上還看到另一種更簡(jiǎn)便的方式,直接在xmal的根元素中設(shè)置xml:lang=”zh-TW”,StringFormat會(huì)自動(dòng)的適應(yīng)格式,不過(guò)這種方式不好,
畢竟實(shí)際情況中不會(huì)用這種方式設(shè)置多語(yǔ)言化。
??? ComboBox選中項(xiàng)
????? ComboBox有一個(gè)IsSelected屬性來(lái)設(shè)置選中項(xiàng),不過(guò)在動(dòng)態(tài)添加項(xiàng)的時(shí)候,通過(guò)設(shè)置IsSelected是無(wú)效的
ComboBoxItem comboBoxItem; for (int i = 0; i < 5; i++) { comboBoxItem=new ComboBoxItem(); comboBoxItem.Content = "Item" + i; this.comboBox1.Items.Add(comboBoxItem); } if(comboBox1.Items.Count>0) { comboBoxItem = comboBox1.Items[0] as ComboBoxItem; comboBoxItem.IsSelected = true; }?????? 你會(huì)發(fā)現(xiàn)ComboBox上并沒(méi)有顯示第一項(xiàng),其實(shí)解決這個(gè)問(wèn)題很簡(jiǎn)單
if(comboBox1.Items.Count>0) { comboBox1.SelectedIndex = 0; }轉(zhuǎn)載于:https://www.cnblogs.com/626498301/archive/2011/01/21/1940785.html
總結(jié)
以上是生活随笔為你收集整理的Silverlight Tips(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为何泰山植被如此丰富?
- 下一篇: Cognos8.3权限体系[转]