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