使用 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 插件错误消息)。
<TextBlock FontStyle="Italic" Text="{Binding Path=Title}" />
</windows:HierarchicalDataTemplate>
程序集: System.Windows.Controls(在 System.Windows.Controls.dll 中)
这个时候,再运行项目文件,就没有问题了。
六:关于图片路径
首先,图片作为一种资源有大约有三种方法。
第一种,将图片存在于另外的一个项目中
比如单独建立一个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的调用全部采用异步来执行。所以,需要小心地处理结果信息。
/// 模拟数据库表
/// 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; }
}
/// 通用查询方法
/// 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;
}
</datagrid:DataGrid>
<datagrid:DataPager Grid.Row="1" Source="{Binding}" PageSize="10" />
<dataform:DataForm Margin="4" Grid.Column="1" ItemsSource="{Binding}">
</dataform:DataForm>
</datagrid:DataGrid>
{
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);
}
dr.ResourceName = cwr.sourceName.Text.Trim();
dr.DispOrder = ldResource.Last().DispOrder + 1;
//刷新界面
pcvSource.Refresh();
上文中的DispResource被定义为如下。这就是DATAGRID要显示的列。
{
[Display(Name = "来源",AutoGenerateField=true)]
public string ResourceName { set; get; }
[Display(Name = "显示次序")]
public int DispOrder { set; get; }
}
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>
public partial class SLControlDemo : UserControl
{
public SLControlDemo()
{
InitializeComponent();
}
private string msgShow;
public string MsgShow
{
get { return msgShow; }
set { msgShow = value; tb.Text = value; }
}
}