WPF 的模版设计极为强大,通过模版自定义ListView 的显示样式是一种最常用的显示列表的数据的方式,本文完全通过代码实现一个ListView,
ListView绑定的数据为RecordData,且每个格子之前都会有一个圆点。
创建ListView 显示列:
public void InitRecordColumns() //初始化录音记录列信息
{
XmlDocument xml_doc = new XmlDocument();
try
{
xml_doc.Load("SystemConfig.xml");
XmlNode node = xml_doc.SelectSingleNode("Configs/RecordConfig");
XmlNodeList members = node.ChildNodes;
GridView gv_recordlist = new GridView();
gv_recordlist.Columns.Clear();
foreach (XmlNode member in members)
{
string name = member.ChildNodes[0].InnerText;
string column_name = member.ChildNodes[1].InnerText;
int hidden = Convert.ToInt32(member.ChildNodes[2].InnerText);
string width = member.ChildNodes[3].InnerText;
if (hidden == 0)
{
GridViewColumn gvc_column = new GridViewColumn();
GridViewColumnHeader gvch_column = new GridViewColumnHeader();
gvch_column.Height = 25;
gvch_column.Background = Brushes.LightBlue;
gvch_column.Width = Convert.ToInt32(width);
gvch_column.Content = column_name;
gvch_column.ToolTip = name;
gvch_column.Click += new RoutedEventHandler(gvch_column_Click);
gvc_column.Header = gvch_column;
//gvc_column.DisplayMemberBinding = new Binding(name);
DataTemplate cdt = new DataTemplate();
FrameworkElementFactory cfef = new FrameworkElementFactory(typeof(StackPanel));
Binding binding = new Binding();
binding.Path = new PropertyPath(name);
cfef.SetValue(StackPanel.OrientationProperty, Orientation.Horizatal);
FrameworkElementFactory subfef1 = new FrameworkElementFactory(typeof(Label));
subfef1.SetValue(Label.ContentProperty, "●");
cfef.AppendChild(subfef1);
FrameworkElementFactory subfef2 = new FrameworkElementFactory(typeof(TextBox));
subfef2.SetBinding(TextBox.TextProperty, binding);
cfef.AppendChild(subfef2);
cdt.VisualTree = cfef;
gvc_column.CellTemplate = cdt;
gv_recordlist.Columns.Add(gvc_column);
}
}
lv_record.View = gv_recordlist;
lv_record.SelectionMode = SelectionMode.Single;
}
catch (Exception ex)
{
MessageBox.Show("Create record view fail." + ex.ToString());
return;
}
}