将Visio导出的XAML集成到Silverlight应用程序中
本文关键字:Silverlight 应用程序 集成 XAML Visio | 更新日期: 2023-09-27 18:27:19
可以将Microsoft Visio绘图导出为包含Silverlight内容的网站。这在这篇博客文章中有描述。
此类出口的输出如下:
- xaml_1.xaml(包含控件的结构)
- data.xml(包含所有文本内容,如标签等)
- 几个java脚本文件
- *带有Silverlight容器的.htm页面
- 其他文件,如*.css和图像
我想将导出的XAML代码集成到另一个现有的Silverlight应用程序中。我发现这篇博客文章告诉我如何在运行时动态加载XAML代码。
我想知道的是如何"合并"XAML文件和data.xml,以及如何获得对XAML代码项的引用,以便更改某些文本。。。
在关联的xaml-js文件(例如xaml_1.js)中,有一个handleMouseUp函数,它从(xaml)'name'字符串中读取形状ID,然后在frameset.js中调用OnShapeClick。这个方法对所有基于js的Save as web输出类型都是通用的,然后调用其他方法来填充详细信息表或检索在data.xml中找到的超链接。如果您查看frameset.js中的FindShapeXML函数,您会发现它会根据页面和形状ID获得适当的数据(请注意,根据Visio本身,形状ID对页面是唯一的)。
在创建数据绑定或动态形状文本方面,@slfan强调的字形问题的一个解决方法是阻止文本输出。例如,在Visio中运行"另存为Web"之前,您可以循环浏览所有形状,并将其HideTextShapeSheet单元格设置为true。这将阻止生成所有的字形xaml,并且您仍然可以访问data.xml中的文本字符串。我想您不会从正确的字体缩放中受益,但这取决于您的场景。如果正确获取比例真的很重要,那么可以解析字形元素的RenderTransform属性(在属性语法而不是属性元素语法中描述)。
有字形(我猜)是因为它反映了Visio在应用程序中的工作方式,即在Visio中,您可以在形状的文本中选择单个字符,并应用不同的字体和格式,但如果您不需要,我很想放弃字形集合,只使用@slfan建议的TextBlock。
我认为您必须稍微调整一下生成的XAML。不幸的是,Visio会为每个字符生成字形。如果你想在运行时更改文本,你必须删除这个字形并自己添加所需的控件(例如TextBlock)。
您可以使用XamlReader.load将XAML加载到Silverlight中。您可以在此处找到一个很好的描述:http://blogs.silverlight.net/blogs/msnow/archive/2008/10/09/silverlight-tip-of-the-day-60-how-to-load-a-control-straight-from-xaml.aspx.
您可以忽略的所有JavaScript和HTML文件,即标识控件所需的XML文件。XML中的ID引用XAML文件中的相应元素。