使用 HTML BrIDge 功能的一个原因是创建将 Silverlight 与其他基于 HTML 的内容相集成的网页。还可以使用 HTML DOM 在单一页面中集成多个基于 Silverlight 的应用程序。然而,在此情况下,Silverlight 为在多个 Silverlight 插件之间进行通信提供内置支持,称为本地消息传递。
通过本地消息传递,您可以将消息从一个基于 Silverlight 的应用程序发送到在同一台计算机上运行的其他应用程序。这样,您可以创建跨多个插件的 Silverlight 内容,例如从横幅跨越到侧栏的动画。有关更多信息,请参见基于 Silverlight 的本地应用程序之间的通信。
另一种方式是:
对于应用程序导航,您可以使用 Frame 和 Page 控件。此框架用作页面控件的容器,有助于进行页面导航。每页都包含内容,您可以根据需要添加很多页面来向用户表示内容。在任一时刻,框架只显示一个页面的内容。对于外部导航,您可以在用户界面中提供普通的超链接,或者通过 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目录下,这种方法不可取就不介绍了 。
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; }
}
}
以上是内存溢出为你收集整理的silverlight基础问题汇总全部内容,希望文章能够帮你解决silverlight基础问题汇总所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)