将Visio导出的XAML集成到Silverlight应用程序中

时间:2012-03-08 10:18:29

标签: c# silverlight xaml visio xamlreader

可以将Microsoft Visio绘图导出为包含Silverlight内容的网站。这在blog-post上进行了描述。

此类导出的输出如下:

  • xaml_1.xaml(包含控件的结构)
  • data.xml(包含所有文本内容,如标签等)
  • 几个java脚本文件
  • *。带有Silverlight容器的htm页面
  • 其他文件,例如* .css和images

我想将导出的XAML代码集成到另一个现有的Silverlight应用程序中。我发现这个blog-post告诉我如何在运行时动态加载XAML代码。

我想知道的是如何“合并”XAML文件和data.xml以及如何获取对XAML代码项的引用,以便更改某些文本...

2 个答案:

答案 0 :(得分:1)

在关联的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”之前,您可以遍历所有形状并将其 HideText ShapeSheet单元格设置为true。这将阻止生成所有字形xaml,并且您仍然可以访问data.xml中的文本字符串。我想你不会从正确的字体缩放中受益,但这取决于你的场景。如果获得正确的比例非常重要,那么您可以解析字形元素的RenderTransform属性(在属性语法中描述,而不是属性元素语法)。

雕文在那里(我猜)因为它反映了Visio在应用程序中的工作方式,即在Visio中你可以选择形状文本中的单个字符并应用不同的字体和格式,但如果你不需要,我我很想抛弃字形集合,只是像@slfan建议的那样使用TextBlock。

答案 1 :(得分:0)

我认为你必须稍微调整生成的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文件中的相应元素。