silverlight基础问题汇总

silverlight基础问题汇总,第1张

概述silverlight基础   一:布局     共有三种常用模式:     Canvas:绝对位置;     StackPanel:相对位置;     Grid:表格;   二:样式表     可以创建样式字典文件,同时,该字典文件必须包含在app.xaml中。   三:框架或者导航     一种方式如下: 使用 HTML Bridge 功能的一个原因是创建将 Silverlight 与其他基于 silverlight基础   一:布局     共有三种常用模式:     Canvas:绝对位置;     StackPanel:相对位置;     GrID:表格;   二:样式表     可以创建样式字典文件,同时,该字典文件必须包含在app.xaml中。   三:框架或者导航     一种方式如下:

使用 HTML BrIDge 功能的一个原因是创建将 Silverlight 与其他基于 HTML 的内容相集成的网页。还可以使用 HTML DOM 在单一页面中集成多个基于 Silverlight 的应用程序。然而,在此情况下,Silverlight 为在多个 Silverlight 插件之间进行通信提供内置支持,称为本地消息传递。

通过本地消息传递,您可以将消息从一个基于 Silverlight 的应用程序发送到在同一台计算机上运行的其他应用程序。这样,您可以创建跨多个插件的 Silverlight 内容,例如从横幅跨越到侧栏的动画。有关更多信息,请参见基于 Silverlight 的本地应用程序之间的通信

    另一种方式是:

    对于应用程序导航,您可以使用 FramePage 控件。此框架用作页面控件的容器,有助于进行页面导航。每页都包含内容,您可以根据需要添加很多页面来向用户表示内容。在任一时刻,框架只显示一个页面的内容。对于外部导航,您可以在用户界面中提供普通的超链接,或者通过 HTML DOM 执行编程导航。

     

四: 未经处理的异常处理

在应用程序的生存期中,可能会发生意外情况,而导致 Silverlight 插件引发异常。尽管您可以在应用程序代码中捕获异常,但您可能无法预期所有潜在的异常。

未经处理的异常将导致 Silverlight 插件停止在浏览器中运行。为了防止发生这一情况,请处理 Application..::.UnhandledException 事件。可以用事件数据来确定异常是否可恢复。如果可以从异常中恢复,则将 ApplicationUnhandledExceptionEventArgs..::.Handled 属性设置为 true

如果您不在托管代码中处理异常,则将发生 Silverlight 插件 onError 事件。这向您提供最后一个机会,供您通过在宿主网页中使用 JavaScript 来处理此异常。onError 事件提供对插件错误代码的访问,这对于进行调试可能很有用。有关更多信息,请参见调试、错误处理和异常。有关错误代码信息,请参见 Silverlight Plug-in Error Messages(Silverlight 插件错误消息)。

  五:在XAML中使用命名空间     如果在XAML使用如下标示,     <windows:HIErarchicalDataTemplate x:Key="ChildTemplate" ItemsSource="{Binding Path=Childtopics}"  >
          <TextBlock FontStyle="Italic" Text="{Binding Path=Title}"  />
    </windows:HIErarchicalDataTemplate>     若提示     未找到类型“windows:HIErarchicalDataTemplate”。请确保不缺少程序集引用,并且已生成所有引用的程序集。     则,我们需要在类库文档中找到HIErarchicalDataTemplate这个类,发现该类属于 命名空间:   System.Windows
程序集:  System.windows.Controls(在 System.windows.Controls.dll 中)     故,我们要在XAML文档中,标识出:     xmlns:windows="clr-namespace:System.windows;assembly=System.windows.Controls"  
    这个时候,再运行项目文件,就没有问题了。

六:关于图片路径

    首先,图片作为一种资源有大约有三种方法。
    第一种,将图片存在于另外的一个项目中 
    比如单独建立一个ImageResource的项目里面放了图片,那么在Silverlight项目中怎么访问这个路径那? 使用的是这种访问模式:
    <image source ="/ImageResource;component/a.jpg" ... 
    第二种,就是图片位于Silverlight项目中,比如我在项目下放了一个文件夹Images,其中有一个图片是LableBg.png,并且将这个LableBg的图片的属性改为 Resource,这时图片会编译打包进DLL中,<image source ="Images/LabelBg.png" ,路径前不需要加上斜线 。
    如果把LableBg的图片的属性改为 内容,这时 图片会编译打包进XAP文件中 ,这时访问这个图片需要<image source ="/Images/LabelBg.png" ...,需要加上一个斜线 
    最后一种办法就是将图片直接放到ClIEntBin目录下,这种方法不可取就不介绍了 。

  七:连接WEBSERVICE     假设创建SL主应用程序的时候,应用程序名为SLApp,提供WEBSERVICE服务器的网站为SLApp.web,整个解决方案的逻辑层为SLBLL。也就是说,数据流方向为:     SLApp从SLBLL获取数据,SLBLL从SLApp.web提供的WEBSERVICE获得来自于数据库的数据。     基于此,首先,我们要在SLBLL中添加对WEBSERVICE的引用,我们会发现,SL项目在对WS进行引用的时候,会在项目根目录下创建文件ServiceReferences.ClIEntConfig。     下面来讲两个问题:     1: 假设你的编码一切正常,这个时候运行程序,我们会发现出错,在错误日志中,发现系统找不到ServiceReferences.ClIEntConfig这个文件。     也就是说,你还必须在SLApp的根目录下手动创建一个一摸一样的文件,才能保证系统的正常运行。
    2:SL项目对于WEBSERVICE的调用全部采用异步来执行。所以,需要小心地处理结果信息。   八:WEBSERVICE调用数据库     由于SL3.0不支持DATASET和DATAtable,所以,我们无法在WEBSERVICE的函数中返回一个DATASET。可以使用List<ARealObject>来代替DataSet返回结果。     问题是,针对每一个表的查询,都提供一个返回List<ARealObject>的做法,不太通用,也不灵活,比如有的时候我们只需要查询某个表的一条记录的特定一个字段,显然这种方式效率不是很高。而我们想到,一个表,无非就是一些不同类型字段的组合,故,可以模拟一个表示表的对象,如下:     /// <summary>
    /// 模拟数据库表
    /// PS:一张表的字段不外乎几个基本数据类型,查询出来的值,在这里进行赋值
    /// 本类的一个实例,相当于是一条记录,本类的一个实例数组,就相当于是datatable
    /// 在UI端,你可将本类的实例数组转换为数据源
    /// </summary>
    public class BaseVars
    {
        public BaseVars()
        {
            ListString = new List<string>();
            ListInt = new List<int>();
            ListBool = new List<bool>();
            ListByte = new List<byte>();
            Listfloat = new List<float>();
            ListDouble = new List<double>();
        }
        public List<string> ListString { get; set; }
        public List<int> ListInt { get; set; }
        public List<bool> ListBool { get; set; }
        public List<byte> ListByte { get; set; }
        public List<float> Listfloat { get; set; }
        public List<double> ListDouble { get; set; }
    }       则我们的WS的函数就可以是如下:         /// <summary>
        /// 通用查询方法
        /// 1:查询返回的记录,将会生成实例BaseVars;
        /// 2:本方法返回BaseVars的列表;
        /// 3:在调用方,要重新对数据进行组织,以便进行展示;
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="commandParams"></param>
        /// <returns></returns>
        [WebMethod]
        public List<BaseVars> GetListBaseVars(string sql,params sqlParameter[] commandParams)
        {
            List<BaseVars> lr = new List<BaseVars>();
            using (DataSet ds = sqlHelper.ExecuteDataSet(sql,commandParams))
            {
                if (ds == null || ds.tables[0].Rows.Count < 0)
                {
                    return null;
                }
                lr = ListBaseDataSet.DataSetToListBaseVars(ds,0);
            }
            return lr;
        }         注意,上文中的ListBaseDataSet.DataSetToListBaseVars这个函数,是用来将DataSet转化为一个BaseVars的列表。   九:DATAGRID的使用 9.1 简单应用     对于数据的展示,在SL项目中有DataGrID,DataPager,DataForm。最常用的方式如下:     在XAML中:         <datagrID:DataGrID x:name="sd" ItemsSource="{Binding}">
        </datagrID:DataGrID>
        <datagrID:DataPager GrID.Row="1" Source="{Binding}" PageSize="10" />
       <dataform:DataForm  margin="4" GrID.Column="1" ItemsSource="{Binding}">
       </dataform:DataForm>     在XAML.CS中:         List<ARealObject> la = .....      //获取数据         this.DataCotext = la;     这样就可以进行简单的展示。

 

9.2 自定义数据源     如:     <datagrID:DataGrID x:name="ly">
    </datagrID:DataGrID>     <datagrID:DataPager x:name="lyp" GrID.Row="1" PageSize="10" />     数据绑定代码为:     //我是在这个函数中进行数据的绑定的     voID GetResourceCompleted(List<dispResource> ldr)
        {
            ldResource = ldr;    //将一个List赋值给已定义好的变量
            pcvSource = new PagedCollectionVIEw(ldResource);  //PagedCollectionVIEw用于展示数据
            this.ly.ItemsSource = pcvSource;    //与在XMAL中定义好的变量赋值
            this.lyp.source = pcvSource;
            this.ly.CellEditEnded += new EventHandler<DataGrIDCellEditEndedEventArgs>(ly_CellEditEnded);    
        }     通过这种方式,你可以将数据源的赋值变得更灵活。   9.3 编辑数据     如果你需要对DataGrID的编辑做出处理(如编辑后要保存到数据库),则上文定义的ly_CellEditEnded就可以用来处理该行为。     添加和删除记录的处理如下:     //先创建一个记录      dispResource dr = new dispResource();
     dr.Resourcename = cwr.sourcename.Text.Trim();
     dr.dispOrder = ldResource.Last().dispOrder + 1;       //将这个记录添加到pcvSource的数据源ldResource中去      ldResource.Add(dr);
     //刷新界面      pcvSource.CommitEdit();
     pcvSource.Refresh();

 

9.4 自定义列

    上文中的dispResource被定义为如下。这就是DATAGRID要显示的列。

    public class dispResource
    {
        [display(name = "来源",autoGenerateFIEld=true)]
        public string Resourcename { set; get; }
        [display(name = "显示次序")]
        public int dispOrder { set; get; }

    }

      10:在SL中开发自定义控件     首先,需要创建一个SL的类库项目。如:.QuestionsDbSLCtrls。在这个项目中,创建一个SL控件,如下:     XAML:     <UserControl x:Class="YiPin.QuestionsDbSLCtrls.SLControlDemo"
    xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x=" http://schemas.microsoft.com/winfx/2006/xaml"
    WIDth="400" Height="300">
    <GrID x:name="LayoutRoot" Background="Blue">
        <TextBlock x:name="tb" Text="default"></TextBlock>
    </GrID>
    </UserControl>       CS:

    public partial class SLControlDemo : UserControl
    {
        public SLControlDemo()
        {
            InitializeComponent();
        }

 

        private string msgShow;
        public string MsgShow
        {
            get { return msgShow; }
            set { msgShow = value; tb.Text = value; }
        }
    }

    编译后,在要调用它的项目中,在VS编辑界面工具箱上点右键选择“选择项”,再选择“silverlight 组件项”,然后“浏览”,选择QuestionsDbSLCtrls项目所对应的DLL。这个时候工具箱上就添加了这个控件。     在你要调用的项目中,拖动刚添加的这个控件到界面,就可以进行编码了。   总结

以上是内存溢出为你收集整理的silverlight基础问题汇总全部内容,希望文章能够帮你解决silverlight基础问题汇总所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1042357.html

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

发表评论

登录后才能评论

评论列表(0条)

保存