问题应该出在plugin.content.ActualWidth上。在Silverlight对象实例化的初期阶段,ActualWidth和ActualHeight并不一定能保证提供正确的值。
参见 http://msdn2.microsoft.com/en-us/library/bb979660.aspx 中的Important Note。
你可以将程序改为(红色的是修改的部分)。
<Canvas xmlns="http://schemas.microsoft.com/client/2007" x:Name="Canvas1" Loaded="Page_load">
</Canvas>
function Page_load(sender, eventArgs)
{
var strH = '';
var objH;
var plugin = sender.getHost();
var i = 0;
var Canvas1 = plugin.content.findName("Canvas1");
i = 10;
strH = '<Line X1="0" Y1="' + i + '" X2="' + Canvas1.Width + '" Y2="' + i + '" Stroke="gray" />'
objH = plugin.content.CreateFromXaml(strH);
sender.children.add(objH);
i += 10;
strH = '<Line X1="0" Y1="' + i + '" X2="' + Canvas1.Width + '" Y2="' + i + '" Stroke="red" />';
objH = plugin.content.CreateFromXaml(strH);
sender.children.add(objH);
}