轉帖|其它|編輯:郝浩|2011-06-14 14:29:04.000|閱讀 1459 次
概述:RichTextBox是Silverlight中一個重要的控件,常用它來呈現SL中富文本,使用此控件可以呈現常見的加粗,斜體,下劃線,段 落,還以加載各種控件等。它支持XAML格式文本輸出,在實際應用中比較廣泛。提到Silverlight可能大家用到比較多的數據展現,也許是數據綁定 來實現的,那么能否結合如上二則實現在RichTextBox上的XAML綁定了,答案是肯定的。下邊就詳細介紹一下具體實現過程。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
RichTextBox是Silverlight中一個重要的控件,常用它來呈現SL中富文本,使用此控件可以呈現常見的加粗,斜體,下劃線,段 落,還以加載各種控件等。它支持XAML格式文本輸出,在實際應用中比較廣泛。提到Silverlight可能大家用到比較多的數據展現,也許是數據綁定 來實現的,那么能否結合如上二則實現在RichTextBox上的XAML綁定了,答案是肯定的。下邊就詳細介紹一下具體實現過程。
應用場景描述:
為了更好的應用自己的樣式和一些特殊的轉換處理,對RichTextBox進行了重寫,在之前的項目應用中,都是使用直接賦值的方式進行xaml的 后臺處理,顯示無誤。但其中一個同事要使用這個自定義的RichTextBox進行數據綁定呈現XAML,經代碼加載后發現此控件不能綁定XAML,問題 出來了,能否修改控件滿足自定義RichTextBox即可進行綁定又可進行后臺賦值的應用了,周末分析一下,此需求是可以實現的。
之前賦值的代碼是這樣的:
public partial class MyRichTxt : UserControl
{
//鑒于篇幅之羅列相關代碼
public MyRichTxt()
{
InitializeComponent();
}
public string Xaml
{
get { return richTxt.Xaml; }
set
{
string slXaml = "";
if (!string.IsNullOrEmpty(value))
slXaml = new XamlConvert().GetSXaml(value);
richTxt.Xaml = slXaml;
}
}
}
在需要使用的界面上直接調用此控件即可,設前臺調用此控件的Name為MyRichTxt,則對應的賦值為:
MyRichTxt.Xaml="<Section><run>這是一個測試示例</run></Section>";
如上的邏輯在處理單獨的后臺賦值呈現時,準確無誤,但如果使用數據綁定了,肯定不被支持,那么如果要數據綁定了,其實在看RichTextBox 時,我們會發現Xaml不是RichTextBox的依賴屬性,即在RichTextBox的定義中沒有這個DependencyProperty,那么 他就不能進行前臺綁定,但總是有辦法的,DataContext是個好方法,在設置完它后,通過Load事件,在后臺賦值到Xaml屬性上從而實現綁定, 文字說明先說這么多,具體代碼如下:
<RichTextBox Name="richTxt" DataContext="{Binding}" Loaded="richTxt_Loaded" HorizontalAlignment="Left" BorderThickness="0" VerticalAlignment="Top" />
ok了,后臺再對應的添加Loaded事件即可。后臺代碼如下:
private void richTxt_Loaded(object sender, RoutedEventArgs e)
{
if ((sender as RichTextBox).DataContext!=null)
Xaml = (sender as RichTextBox).DataContext.ToString();
}
這樣在前臺界面上就可以直接使用綁定的方式給DataContext進行傳值,然后在后臺進行處理。從而實現此控件對綁定的支持,當然之前的賦值代碼邏輯沒變,因此也同樣支持綁定和賦值兩種方式。
運行如上代碼,效果如下:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載