[索引页]
[源码下载]
作者: webabcd
介绍
Silverlight 3.0 控件一览:
在线DEMO
http://www.cnblogs.com/webabcd/archive/2009/08/04/1538238.html
示例
1、演示 TreeView 的使用
TreeView.xml(数据源)
<?
xml version="1.0" encoding="utf-8"
?>
<
root
>
<
node
name
="a level 1"
>
<
node
name
="a level 2"
>
<
node
name
="a level 3"
>
<
node
name
="a level 4"
/>
</
node
>
</
node
>
</
node
>
<
node
name
="b level 1"
>
<
node
name
="b level 2"
>
<
node
name
="b level 3"
>
<
node
name
="b level 4"
>
<
node
name
="b level 5"
/>
</
node
>
</
node
>
</
node
>
</
node
>
<
node
name
="c level 1"
>
<
node
name
="c level 2"
>
<
node
name
="c level 3"
>
<
node
name
="c level 4"
/>
</
node
>
</
node
>
</
node
>
<
node
name
="d level 1"
>
<
node
name
="d level 2"
>
<
node
name
="d level 3"
/>
</
node
>
</
node
>
</
root
>
TreeView.xaml
<
navigation:Page
x:Class
="Silverlight30.Control.TreeView"
xmlns:controls
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
xmlns:common
="clr-namespace:System.Windows;assembly=System.Windows.Controls"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
d:DesignWidth
="640"
d:DesignHeight
="480"
Title
="TreeView Page"
>
<
Grid
x:Name
="LayoutRoot"
>
<
StackPanel
>

<
StackPanel.Resources
>
<!--
HierarchicalDataTemplate - 呈现层级数据的数据模板
ItemsSource - 指定下一级数据的数据源
ItemTemplate - 指定下一级数据的数据模板
-->
<
common:HierarchicalDataTemplate
x:Key
="childTemplate"
ItemsSource
="
{Binding Path=Children}
"
>
<
StackPanel
Orientation
="Horizontal"
>
<
CheckBox
/>
<
TextBlock
Text
="
{Binding Path=Title}
"
FontStyle
="Italic"
/>
</
StackPanel
>
</
common:HierarchicalDataTemplate
>
<
common:HierarchicalDataTemplate
x:Key
="treeTemplate"
ItemsSource
="
{Binding Path=Children}
"
ItemTemplate
="
{StaticResource childTemplate}
"
>
<
TextBlock
Text
="
{Binding Path=Title}
"
FontWeight
="Bold"
/>
</
common:HierarchicalDataTemplate
>
</
StackPanel.Resources
>
<!--
ItemsSource - 数据源
ItemTemplate - 指定层级显示数据的模板
-->
<
controls:TreeView
x:Name
="treeView"
Margin
="5"
ItemsSource
="
{Binding}
"
ItemTemplate
="
{StaticResource treeTemplate}
"
SelectedItemChanged
="treeView_SelectedItemChanged"
>
</
controls:TreeView
>
<!--
TreeViewItem - TreeView 的项
Header - 项的标题
HeaderTemplate - 项的标题模板
-->
<
controls:TreeView
x:Name
="treeView2"
Margin
="5"
>
<
controls:TreeViewItem
Header
="level 1"
>
<
controls:TreeViewItem
Header
="level 2"
>
<
controls:TreeViewItem
>
<
controls:TreeViewItem.HeaderTemplate
>
<
DataTemplate
>
<
TextBlock
Text
="level 3"
FontWeight
="Bold"
/>
</
DataTemplate
>
</
controls:TreeViewItem.HeaderTemplate
>
</
controls:TreeViewItem
>
</
controls:TreeViewItem
>
</
controls:TreeViewItem
>
</
controls:TreeView
>
</
StackPanel
>
</
Grid
>
</
navigation:Page
>
TreeView.xaml.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
System.Windows.Navigation;

using
System.Xml.Linq;
using
Silverlight30.Model;

namespace
Silverlight30.Control
{
public partial class TreeView : Page
{
public TreeView()
{
InitializeComponent();

this.Loaded += new RoutedEventHandler(TreeView_Loaded);
}

void TreeView_Loaded(object sender, RoutedEventArgs e)
{
XElement root = XElement.Load("Control/TreeView.xml");

// 构造带层级关系的数据源(递归方式)
var result = LoadData(root);

treeView.DataContext = result;
}

private List<TreeViewModel> LoadData(XElement root)
{
if (root == null)
return null;

var items = from n in root.Elements("node")
select new TreeViewModel
{
Title = (string)n.Attribute("name"),
Children = LoadData(n)
};

return items.ToList();
}

private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
MessageBox.Show(((TreeViewModel)e.NewValue).Title);
}
}
}
2、演示 ListBox 增加的一个功能:多选
ListBox.xaml
<
navigation:Page
x:Class
="Silverlight30.Control.ListBox"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
d:DesignWidth
="640"
d:DesignHeight
="480"
Title
="ListBox Page"
>
<
Grid
x:Name
="LayoutRoot"
>
<
StackPanel
>
<!--
ListBox - 新增特性:可以多选
SelectionMode - 选择模式 [System.Windows.Controls.SelectionMode 枚举]
Single - 只允许单选
Multiple - 可以多选(不需要任何辅助键)
Extended - 可以多选(需要 Ctrl 或 Shift 的配合)
-->
<
ListBox
x:Name
="listBox"
Margin
="5"
Width
="200"
Height
="100"
SelectionMode
="Extended"
>
<
ListBox.ItemTemplate
>
<
DataTemplate
>
<
StackPanel
Orientation
="Horizontal"
>
<
TextBlock
Text
="
{Binding}
"
Margin
="5"
/>
</
StackPanel
>
</
DataTemplate
>
</
ListBox.ItemTemplate
>
</
ListBox
>
<
Button
Content
="获取选中项"
Click
="Button_Click"
/>
<
TextBlock
x:Name
="lblResult"
/>
</
StackPanel
>
</
Grid
>
</
navigation:Page
>
ListBox.xaml.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
System.Windows.Navigation;

namespace
Silverlight30.Control
{
public partial class ListBox : Page
{
public ListBox()
{
InitializeComponent();

this.Loaded += new RoutedEventHandler(ListBox_Loaded);
}

void ListBox_Loaded(object sender, RoutedEventArgs e)
{
List<string> items = new List<string>();
for (int i = 0; i < 30; i++)
{
items.Add(i.ToString().PadLeft(10, '0'));
}

listBox.ItemsSource = items;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
lblResult.Text = "";
// ListBox.SelectedItems - 选中的对象集合
foreach (string s in listBox.SelectedItems)
{
lblResult.Text += s + "/r/n";
}
}
}
}
3、演示 DataGrid 的几个新增的功能
DataGrid.xaml
<
navigation:Page
xmlns:data
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
x:Class
="Silverlight30.Control.DataGrid"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
d:DesignWidth
="640"
d:DesignHeight
="480"
Title
="DataGrid Page"
>
<
Grid
x:Name
="LayoutRoot"
>
<!--
新增功能:结合 PagedCollectionView 实现数据分组;增加了一些编辑数据的相关事件;结合 DataAnnotations 实现数据验证
-->
<
data:DataGrid
x:Name
="dataGrid"
AutoGenerateColumns
="False"
>
<
data:DataGrid.Columns
>
<
data:DataGridTextColumn
Binding
="
{Binding Name}
"
Header
="名字"
/>
<
data:DataGridTextColumn
Binding
="
{Binding DateOfBirth}
"
Header
="生日"
/>
</
data:DataGrid.Columns
>
</
data:DataGrid
>

</
Grid
>
</
navigation:Page
>
DataGrid.xaml.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
System.Windows.Navigation;

using
System.Xml.Linq;
using
Silverlight30.Model;
using
System.Windows.Data;

namespace
Silverlight30.Control
{
public partial class DataGrid : Page
{
public DataGrid()
{
InitializeComponent();

this.Loaded += new RoutedEventHandler(DataGrid_Loaded);
}

void DataGrid_Loaded(object sender, RoutedEventArgs e)
{
List<EmployeeModel> employees = new List<EmployeeModel>();
employees.Add(new EmployeeModel { Name = "aabb", DateOfBirth = DateTime.Now, Salary = 1111 });
employees.Add(new EmployeeModel { Name = "aabc", DateOfBirth = DateTime.Now, Salary = 1111 });
employees.Add(new EmployeeModel { Name = "abcc", DateOfBirth = DateTime.Now, Salary = 1122 });
employees.Add(new EmployeeModel { Name = "abbc", DateOfBirth = DateTime.Now, Salary = 1122 });
employees.Add(new EmployeeModel { Name = "aaab", DateOfBirth = DateTime.Now, Salary = 1122 });
employees.Add(new EmployeeModel { Name = "bcca", DateOfBirth = DateTime.Now, Salary = 1122 });
employees.Add(new EmployeeModel { Name = "bbac", DateOfBirth = DateTime.Now, Salary = 1133 });
employees.Add(new EmployeeModel { Name = "cbaa", DateOfBirth = DateTime.Now, Salary = 1133 });
employees.Add(new EmployeeModel { Name = "ccaa", DateOfBirth = DateTime.Now, Salary = 1133 });
employees.Add(new EmployeeModel { Name = "cccb", DateOfBirth = DateTime.Now, Salary = 1144 });
employees.Add(new EmployeeModel { Name = "cccc", DateOfBirth = DateTime.Now, Salary = 1155 });
employees.Add(new EmployeeModel { Name = "cabc", DateOfBirth = DateTime.Now, Salary = 1155 });
employees.Add(new EmployeeModel { Name = "cabb", DateOfBirth = DateTime.Now, Salary = 1166 });

// 通过 PagedCollectionView 的 GroupDescriptions 设置需要分组的字段,绑定到 DataGrid 后,DataGrid会自动对数据做分组显示
PagedCollectionView view = new PagedCollectionView(employees);
view.GroupDescriptions.Add(new PropertyGroupDescription("Salary"));

dataGrid.ItemsSource = view;
}
}
}
4、演示 MediaElement 的增强点:以 H.264 编码,MP4为容器做演示
MediaElement.xaml
<
navigation:Page
x:Class
="Silverlight30.Control.MediaElement"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
d:DesignWidth
="640"
d:DesignHeight
="480"
Title
="MediaElement Page"
>
<
Grid
x:Name
="LayoutRoot"
>
<!--
增加了对视频 H.264 编码格式的支持,和对音频 AAC 编码格式的支持
本例以 H.264 编码,MP4为容器做演示
-->
<
MediaElement
x:Name
="mediaElement"
Source
="/Resource/Demo.mp4"
Width
="320"
Height
="240"
AutoPlay
="True"
MediaEnded
="mediaElement_MediaEnded"
/>
</
Grid
>
</
navigation:Page
>
MediaElement.xaml.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
System.Windows.Navigation;

namespace
Silverlight30.Control
{
public partial class MediaElement : Page
{
public MediaElement()
{
InitializeComponent();
}

private void mediaElement_MediaEnded(object sender, RoutedEventArgs e)
{
// 重播
mediaElement.Stop();
mediaElement.Play();
}
}
}
OK
[源码下载]
[源码下载]
稳扎稳打Silverlight(36) - 3.0控件之TreeView, ListBox增强, DataGrid增强, MediaElement增强
作者: webabcd
介绍
Silverlight 3.0 控件一览:
- TreeView - 树控件
- ListBox - 改进:支持多选
- DataGrid - 改进:结合 PagedCollectionView 实现数据分组, 增加了一些编辑数据的相关事件, 结合 DataAnnotations 实现数据验证, 等。。。
- MediaElement - 增加了对视频 H.264 编码格式的支持,和对音频 AAC 编码格式的支持
在线DEMO
http://www.cnblogs.com/webabcd/archive/2009/08/04/1538238.html
示例
1、演示 TreeView 的使用
TreeView.xml(数据源)
































TreeView.xaml







































































TreeView.xaml.cs



























































2、演示 ListBox 增加的一个功能:多选
ListBox.xaml




































ListBox.xaml.cs















































3、演示 DataGrid 的几个新增的功能
DataGrid.xaml
























DataGrid.xaml.cs






















































4、演示 MediaElement 的增强点:以 H.264 编码,MP4为容器做演示
MediaElement.xaml





















MediaElement.xaml.cs































OK
[源码下载]