在silverlight中开发User Control(用户控件)

在silverlight中开发User Control(用户控件),第1张

概述     在silverlight 2(Beta1) 中开发用户控件与我们以前在Webform中使用的方式基本上接近. 下面是一个DEMO,用于执行一个简单的查询雇员信息的 *** 作.运行结果如下图所示:      首先我们要新建一个Silverlight Application , 名称为:SearchUserControl      在该项目中添加一个Silverlight User Control      在silverlight 2(Beta1) 中开发用户控件与我们以前在Webform中使用的方式基本上接近.
下面是一个DEMO,用于执行一个简单的查询雇员信息的 *** 作.运行结果如下图所示:



     首先我们要新建一个Silverlight Application,名称为:SearchUserControl
     在该项目中添加一个Silverlight User Control,名称为:EmployeeSearch

     然后我们在该用户控件的CS代码中添加一个类用于描述雇员信息,如下:

public   class  EmployeeInfo
{
    
public   string  EmployeeNo {  get set ; }
    
public   string  Employeename {  get set ; }
}

      另外还有一个EmployeenameEventArgs类,用于当点击查询时,将要查询的雇员姓名以事件
参数方式传递到Page页面中,如下:

public   class  EmployeenameEventArgs : EventArgs
{
    
public   string  Employeename {  get set ; }
}


      到这里准备工作就绪,下面是相应的控件xaml代码,请将其粘贴到EmployeeSearch.xaml中:
   

< GrID  x:name ="LayoutRoot"  Background ="White" >
    
< GrID.RowDeFinitions >
        
< RowDeFinition  Height ="200"   />
        
< RowDeFinition  Height ="100"   />
        
< RowDeFinition  Height ="50"   />
    
</ GrID.RowDeFinitions >

    
< ListBox  margin ="10"  x:name ="EmployeeList" />

    
< StackPanel   GrID.Row ="1"  margin ="12" >
        
< TextBlock > 输入要查询的名称: </ TextBlock >
        
< TextBox  x:name ="Search"  margin ="10"  Text ="james"   />
    
</ StackPanel >
    
< button  margin  ="10"  Content ="获取Employee信息"  GrID.Row ="2"  Click ="OnGetEmployee"
    WIDth
="120"   />
</ GrID >  
      然后将下面的cs代码复制到EmployeeSearch.xaml.cs中,相关内容参见注释:
   

public   partial   class  EmployeeSearch : System.windows.Controls.UserControl
{
  
    
#region  使用依赖属性从PAGE页面传参到当前用户控件,详情参见Page.xaml页面
    
public   static  DependencyProperty SearchEmployeenameProperty  =
             DependencyProperty.Register(
" SearchEmployeename " typeof ( string ),
             
typeof (EmployeeSearch),  null );

    
    
public   string  SearchEmployeename
    {
        
get
        {
            
return  (( string ) base .GetValue(SearchEmployeenameProperty));
        }
        
set
        {
            
base .SetValue(SearchEmployeenameProperty, value);
        }
    }
    
#endregion

    
///   <summary>
    
///  声明查询单击事件
    
///   </summary>
     public   event  EventHandler < EmployeenameEventArgs >  SearchClick;

    
public  EmployeeSearch()
    {
        InitializeComponent();
        
this .Loaded  +=  OnLoaded;
    }


    
voID  OnLoaded( object  sender, RoutedEventArgs e)
    {
        Search.Text 
=  SearchEmployeename;
    }
    

    
voID  OnGetEmployee( object  o, EventArgs e)
    {
        
// 当有事件绑定时(参见page.xaml中的 SearchClick="OnSearch" 属性)
         if  (SearchClick  !=   null )
        {
            SearchEmployeename 
=  Search.Text;
            
// 运行绑定的单击事件代码
            SearchClick( this new  EmployeenameEventArgs()
            {
                Employeename 
=  Search.Text
            });
        }
    }

    
// 将ListBox的ItemsSource属性开放给Page页面,以便进行数据绑定
     public  System.Collections.IEnumerable ItemsSource
    {
        
get
        {
            
return  EmployeeList.ItemsSource;
        }
        
set
        {
            EmployeeList.ItemsSource 
=  value;
        }
    }
}

    这样控件的开发就完成了,下面是在page.xaml中声明并设置这个控件相应属性的代码:

< UserControl  x:Class ="SearchUserControl.Page"
    xmlns
="http://schemas.microsoft.com/clIEnt/2007"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    WIDth
="400"  Height ="400"  xmlns:local ="clr-namespace:SearchUserControl" >
    
< UserControl.Resources >
        
< local:EmployeeInfo  Employeename ="王五"  x:Key ="myEmployee"   />
    
</ UserControl.Resources >
    
    
< StackPanel   x:name ="LayoutRoot"  Background ="White" >
        
< local:EmployeeSearch  x:name ="SearchControl"  SearchClick ="OnSearch"
                 SearchEmployeename 
= "{Binding Employeename}"
                 DataContext 
= "{StaticResource myEmployee}"   />
        
        
< TextBlock  x:name ="txtEmployeename"  Text ="暂无"  FontSize ="16"  margin ="10"  TextAlignment ="Center"   />
    
</ StackPanel >
</ UserControl >

     其中的xmlns:local="clr-namespace:SearchUserControl"为控件的名空间的引用,类似于我们
以前写用户控件时的:

< %@ Register  TagPrefix =""  namespace =""  Assembly =""  % >
    而下面代码即是我们引用该控件并进行属性设置的声明:

< local:EmployeeSearch  x:name ="SearchControl"  SearchClick ="OnSearch"
                 SearchEmployeename 
= " {Binding Employeename} "
                 DataContext 
= " {StaticResource myEmployee} "   />
    StaticResource myEmployee会使用本地绑定的静态资源中所指向的数据,如下:
 

< UserControl.Resources >
    
< local:EmployeeInfo  Employeename ="王五"  x:Key ="myEmployee"   />
</ UserControl.Resources >
     这样就会将控件中的搜索框绑定到该初始值(资源)上.

     而下面就是实际运行这个控件执行查询 *** 作时CS代码(page.xaml.cs):
    

voID  OnSearch( object  sender, EmployeenameEventArgs e)
{
    List
< string >  employeeList  =   new  List < string > ();
    
foreach  (EmployeeInfo en  in  GetData(e.Employeename))
    {
        employeeList.Add(en.EmployeeNo 
+   "   "   +  en.Employeename);
    }

    SearchControl.ItemsSource 
=  employeeList;

    txtEmployeename.Text 
=   " 查询有关  """   +  SearchControl.SearchEmployeename  +   """ Employee信息 " ;
}


private  List < EmployeeInfo >  GetData( string  value)
{
    Dictionary
< string string >  employee  =   new  Dictionary < string string > (){  { " 10001 " " 张三 " },
                                                                             {
" 10002 " " 李四 " },
                                                                             {
" 10003 " " 王五 " },
                                                                             {
" 10004 " " 马六 " },
                                                                             {
" 10005 " " 王大麻子 " },
                                                                             {
" 10006 " " 王宝强 " },
                                                                             {
" 10007 " " 王蛋蛋 " },
                                                                             {
" 10008 " " 王五强 " }
                                          };

    
return  (from e  in  employee
            
where  e.Value.Contains(value.Trim())
            select 
new  EmployeeInfo
            {
                EmployeeNo 
=  e.Key,
                Employeename 
=  e.Value
            }).ToList();
}    

     因为代码比较简单,基本上就是一个linq to object查询,所以就不多做说明了.

     好了,今天的内容就先到这里,有兴趣的朋友可以在回复中进行讨论.

     源码下载地址,请点击这里:)
总结

以上是内存溢出为你收集整理的在silverlight中开发User Control(用户控件)全部内容,希望文章能够帮你解决在silverlight中开发User Control(用户控件)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1055796.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存