我的Silverlight应用程序没有显示更改

时间:2010-10-26 17:52:44

标签: silverlight prism

这是我第一次使用SL(但不是WPF)。我正在学习PRISM观看MTaulty的精彩视频:http://channel9.msdn.com/blogs/mtaulty/prism--silverlight-part-1-taking-sketched-code-towards-unity

到目前为止一切都那么好,我和最后一个视频一样,我正在做他在VS中做的事情。我正在使用SL4& mvc2 web& sl4的棱镜。

我发现了一个问题,我不知道发生了什么。

我的SL应用程序本身并未显示任何更改。我有一个基本的shell:

<Grid x:Name="LayoutRoot" Background="Azure">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="2*" />
    </Grid.ColumnDefinitions>
    <ctls:GridSplitter Grid.RowSpan="2" HorizontalAlignment="Right"
                       VerticalAlignment="Stretch" Width="2"
                       Background="Black" />
    <ctls:GridSplitter Grid.Column="1"
                       HorizontalAlignment="Stretch" VerticalAlignment="Bottom"
                       Height="2" Background="Black" />

    <Border Background="SkyBlue" CornerRadius="3"
            Margin="5" Grid.RowSpan="2">
        <ContentControl rgn:RegionManager.RegionName="FolderSelectionRegion"
                        HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                        HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" />
    </Border>
    <Border
        Background="SkyBlue"
        CornerRadius="3"
        Margin="5"
        Grid.Column="1">
        <ContentControl
            rgn:RegionManager.RegionName="MailSelectionRegion"
            HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch"
            HorizontalContentAlignment="Stretch"
            VerticalContentAlignment="Stretch" />
    </Border>
</Grid>

问题是,我在第一个regionManager中注册了一个View,完美,我注册了第二个视图,但它没有显示......好吧,某个地方有些bug ...但没有。

我意识到第二个regionManager的边框没有显示,好的。我注释了注册视图的行(视图正在工作),视图仍然显示出来。我评论了引导程序,从Application_Startup中删除它,没有任何视图仍然显示(不可能,我的应用程序无法知道如何执行命令行管理程序,这一切都被注释掉了。)

简而言之,我确定如果删除3个文件,应用程序仍在运行...我清理了解决方案,从ClientBin中删除了.xap文件......没什么,应用程序仍然显示视图等等。换句话说,应用程序没有反映代码的变化。

发生了什么事?

谢谢。

编辑:近一年后......

所以,我没有触及Silverlight,但是今天我想创建一个非常简单的应用程序(只是一个路径和文本框)并且...我的应用程序开始不显示更改。

我无法重现该错误,我不知道是什么触发了这个,但我知道这是ASP.NET MVC的一个问题。

我在这里谈论的项目,以及我今天制作的项目,都使用ASP.NET MVC来启动SL项目。

我将EmailClient项目(只是我们感兴趣的部分)上传到我的主持人:www.foxandxss.net/stuff/EmailClient.rar

很容易看出问题所在。首先,您可以看到在Shell.xaml中,LayoutRoot的颜色是Azure,如果您运行应用程序,它将是绿色(当我今天打开这个应用程序时,我将其更改为绿色并且工作,但没有更多更改)。如果将颜色更改为另一种颜色,则不会更改。如果您转到App.xaml.cs并注释创建并运行引导程序的行(因此应用程序将无法运行),该应用程序仍将打开。就像运行的应用程序是一些缓存和你做的每一个变化,你不会看到它。

我尝试从MVC项目中删除x​​ap,什么都没有。

问题是,如果您右键单击SL项目并单击“在浏览器中查看”,您将看到更改(Azure BG或如果您评论了boostrapper,则没有任何内容)但是如果您从MVC项目运行它,则没有任何内容

2 个答案:

答案 0 :(得分:3)

过去,我遇到过XAP文件缓存问题。如果是问题,我会在xap文件路径旁边注入一个虚拟参数(在本例中为时间戳):

<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
      <param name="source" value="ClientBin/EmailClient.xap?20110712160700"/>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="4.0.50826.0" />
      <param name="autoUpgrade" value="true" />
      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>

如果在每次构建时刷新该参数,则应使缓存无效并加载最新的xap文件。

答案 1 :(得分:2)

Samuel有正确的想法,但是你可以通过检查服务器上的最后写入时间让Silverlight自动忽略以前的时间戳

<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
      <%
          const string orgSourceValue = @"ClientBin/SilverlightApp.xap";
          string param;
          if (System.Diagnostics.Debugger.IsAttached)
              param = "<param name=\"source\" value=\"" + orgSourceValue + "\" />";
          else
          {
              string xappath = HttpContext.Current.Server.MapPath(@"") + @"\" + orgSourceValue;
              DateTime xapCreationDate = System.IO.File.GetLastWriteTime(xappath);
              param = "<param name=\"source\" value=\"" + orgSourceValue + "?ignore=" + xapCreationDate.ToString("yyyy-MM-dd_HH-mm-ss") + "\" />";
          }
          Response.Write(param);
      %>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="4.0.50401.0" />
      <param name="autoUpgrade" value="true" />
      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>