轉帖|其它|編輯:郝浩|2011-08-30 15:06:43.000|閱讀 1045 次
概述:本文主要介紹如何在Silverlight中為DataGrid控件定制標題行樣式實現多行文本,希望對大家有幫助。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
項目中經常會用到DataGrid這個控件,而且有時候會需要在這個控件的標題行中顯示多行文本。例如下面這樣
如何實現這樣的功能呢?答案是,通過定制HeaderStyle。我經常感慨說,在WPF和Silverlight開發里面,DataBinding和Style,以及Template的機制實在是很厲害,很好用。大家看看下面的例子 吧
<sdk:DataGrid>
<sdk:DataGrid.ColumnHeaderStyle>
<Style
TargetType="sdk:DataGridColumnHeader">
<Setter
Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<ContentControl
Content="{Binding Converter={StaticResource hv}}"></ContentControl>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</sdk:DataGrid.ColumnHeaderStyle>
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn
Header="Item,項目"></sdk:DataGridTextColumn>
<sdk:DataGridTextColumn
Header="Department,部門"></sdk:DataGridTextColumn>
<sdk:DataGridTextColumn
Header="Company,公司"></sdk:DataGridTextColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
注意,我們這里定義了一個特殊的Style,設置了ColumnHeader的ContentTemplate。由于用戶一般在設置列的標題的時候,是輸入一個字符串。我們規定,如果要分多行顯示的話,用逗號分開即可。
那么,如何將這個帶有逗號的字符串轉換為我們想要的標題呢?答案是,使用轉換器。
using System;
using System.Windows.Controls;
using System.Windows.Data;
namespace TechnologySample
{
public class HeaderConverter:IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var text = value.ToString();
var panel = new StackPanel();
Array.ForEach(text.Split(','), s => panel.Children.Add(new TextBlock() { Text = s }));
return panel;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
}
這個代碼很好懂,根據傳入的一個字符串,我們動態構造了一個StackPanel,并且插入了多個TextBlock
要在界面中使用這個轉換器,只需要將它定義為資源即可
<UserControl.Resources>
<ctrl:HeaderConverter
x:Key="hv"></ctrl:HeaderConverter>
</UserControl.Resources>
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園