学习笔记---listbox和listview
许多控件都派⽣⾃ControlControl类,例如:Window、button、ScrollViewer等,他们都有⼀个Content属性,可以⽤来添加其他元素。下⾯要介绍的时Control的另⼀个分⽀:ItemsControl。它直接从Control继承。从ItemsControl继承的控件可以显⽰多个Item。这些控件包括:Menus、Toolbars、statusbars、treeview,listview等。
Listbox和Combox,TabControl⼀样,都派⽣⾃Selector抽象类。⽽ListView则派⽣⾃ListBox。
Control
ItemsControl
Selector (abstract)
ComboBox
ListBox
ListView
TabControl
Listbox可以允许⽤户选择⼀个和多个Item。ComboBox和LlistBox不同的是,他不会⼀直显⽰Items列表,⽽是只有在下拉的时候才会显⽰。
简单介绍ListBox:
SelectionMode:允许选择⼀个或多个项⽬。
ScrollIntoView:滚动到合适位置,以便选择项可见。
SelectionChangedEventArgs:此类含有两个属性:AddItems和RemovedItems,在允许多项选择时会⽤到。
因为在ListBox中的项都是同⼀类型,所以我们还可以⽤到下⾯三个属性:
DisplayMemberpath:这是ItemsControl的属性,可以绑定要显⽰的属性的name。
SelectedValuePath:来⾃Selector类。⽤来设置要表⽰的Item值的属性的名称。
SelectedValue:获取由SelectedValuePath表⽰的Item的属性值。
如:DisplayMemberpath = name;SelectedValuePath= Value;
则在Listbox中界⾯显⽰的是Itme的name属性,但我们通过SelectedValue获取的却是Item的Value属性。
SetBinding和DataContext:数据绑定和上下⽂。
如:lstbox.SetBinding(ListBox.SelectedValueProperty, "Background");
lstbox.DataContext = this;
表⽰将listbox的SelecValue属性与this对象的Backgroud属性绑定。
ListView
ListBox可以完成⼤多数显⽰操作。但是对于Deitails视图来说,因为它需要多列和列标题。在这种情况下就需要ListView控件。Listview直接继承⾃ListBox。ListView只⽐ListBox多了⼀个属性:View(ViewBase类型)。如果View为null,那么ListView就是⼀个Listbox。
⽬前从ViewBase继承的类只有⼀个GridView;他可以通过多列来表⽰对象。GridView的核⼼属性是Columns。每⼀列都是⼀个GridViewColumn,它包括列标题、宽度、要表⽰的Item等。
下⾯是ListView的普通⽤法:⾸先定义⼀个要显⽰的类。然后创建⼀个ListView绑定该类进⾏显⽰。
public class SystemParam
{
string strName;
object objValue;
public string Name
{
set { strName = value; }
get { return strName; }
}
public object Value
{
set { objValue = value; }
get { return objValue; }
}
public override string ToString()
{
return Name + "=" + Value;
}
}
class ListSystemParameters : Window
{
[STAThread]
public static void Main()
{
Application app = new Application();
app.Run(new ListSystemParameters());
}
public ListSystemParameters()
{
Title = "List System Parameters";
// Create a ListView as content of the
window.
ListView lstvue = new ListView();
Content = lstvue;
// Create a GridView as the View of
the ListView.
GridView grdvue = new GridView();
lstvue.View = grdvue;
// Create two GridView columns.
GridViewColumn col = new GridViewColumn(); col.Header = "Property Name";
col.Width = 200;
col.DisplayMemberBinding = new Binding ("Name");
grdvue.Columns.Add(col);
col = new GridViewColumn();
col.Header = "Value";
col.Width = 200;
col.DisplayMemberBinding = new Binding ("Value");
grdvue.Columns.Add(col);
// Get all the system parameters in
one handy array.
PropertyInfo[] props = typeof
(SystemParameters).GetProperties();
// Add the items to the ListView.
foreach (PropertyInfo prop in props)
if (prop.PropertyType != typeof
(ResourceKey))
{
SystemParam sysparam = new
SystemParam();
sysparam.Name = prop.Name;
sysparam.Value = prop.GetValue
(null, null);
lstvue.Items.Add(sysparam);
}
gridview不显示}
}
由于各个列显⽰的对象类型可能不⼀样,例如第⼀列显⽰text。第⼆列显⽰⼀个combox。在这样的情况下,就需要使⽤模板。如DataTemplate。然后将模板绑定到GridViewColumn的CellTemplate属性。
如:
// Create DataTemplate for second column.
DataTemplate template = new
DataTemplate(typeof(string));
FrameworkElementFactory factoryTextBlock =
new FrameworkElementFactory(typeof
(TextBlock));
factoryTextBlock.SetValue(TextBlock
.HorizontalAlignmentProperty,
HorizontalAlignment.Right);
factoryTextBlock.SetBinding(TextBlock
.TextProperty,
new
Binding("Value"));
template.VisualTree = factoryTextBlock;
col.CellTemplate = template;
在上⾯将Textblock的text属性绑定到了"Value"属性。所以就不需要再使⽤DisplayMemberBinding 属性。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论