zoukankan      html  css  js  c++  java
  • 稳扎稳打Silverlight(36) 3.0控件之TreeView, ListBox增强, DataGrid增强, MediaElement增强

    [索引页]
    [源码下载]


    稳扎稳打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(数据源)
    <?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
    [源码下载]
  • 相关阅读:
    关于APPIUM滑动手机屏幕的操作
    关于robotframework,app,appium的xpath定位问题及常用方法
    测试行业学习的知识体系
    APPIUM环境搭建及APP配合RF自动化的操作步骤
    关于RF在实践WEB UI自动化测试时,碰到的问题
    高并发
    [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size:32
    Nginx 反向代理与负载均衡详解
    Nginx 服务器安装及配置文件详解
    牛客网多校训练4 A Ternary String(高阶幂次取模)
  • 原文地址:https://www.cnblogs.com/webabcd/p/1547826.html
Copyright © 2011-2022 走看看