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