none
关于CreateFromXaml方法使用的问题,不知道是不是bug RRS feed

  • 问题

  • 我写了一段程序能够在Canvas的Loaded时画线条。

    xaml文件

    <Canvas xmlns="http://schemas.microsoft.com/client/2007" Loaded="Page_load">
    </Canvas>

    createSilverlight文件

    function Page_load(sender, eventArgs)
    {
     var strH = '';
     var objH;
     var plugin = sender.getHost();
     var i = 0;

     i = 10;
     strH = '<Line X1="0" Y1="' + i + '" X2="' +  plugin.content.ActualWidth + '" Y2="' + i + '" Stroke="gray" />';
     //alert(strH);
     objH = plugin.content.CreateFromXaml(strH);
     sender.children.add(objH);

     i += 10;
     strH = '<Line X1="0" Y1="' + i + '" X2="' +  plugin.content.ActualWidth + '" Y2="' + i + '" Stroke="red" />';
     objH = plugin.content.CreateFromXaml(strH);
     sender.children.add(objH);

    }

    现象是

    1。如果执行以上的程序,画面上什么线都没有。

    2。如果把alert的注释去掉了,画面上只画了一条红线,灰线没有画出来。

    3。如果把画红线的程序删除的话,不管有没有alert,灰线都没有画出来。

     

     

    2008年1月24日 7:00

答案

  • 问题应该出在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);

    }

    2008年2月2日 9:25