【问题标题】:My Silverlight app doesnt show changes我的 Silverlight 应用程序未显示更改
【发布时间】:2011-07-13 07:08:26
【问题描述】:

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

到目前为止一切都很好,我正在使用最后一个视频,并且我正在做他在我的 VS 中所做的同样的事情。我正在为 sl4 使用 SL4 & mvc2 web & prism。

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

我的 SL 应用程序本身没有显示任何更改。我有一个基本的外壳:

<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 中注册了一个视图,完美,我注册了第二个视图但它没有显示...好吧,某个地方有一些错误...但是没有。

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

简而言之,我确定如果我删除 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 项目中删除 xap,但什么也没有。

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

【问题讨论】:

  • 如果您自己的更改没有得到反映,真的很难判断发生了什么。尝试使用一个简单的 Shell 和两个区域创建一个新的解决方案。
  • 是的,重新开始,来自同一个视频的同一个项目。失败的。又是同样的问题。我不知道是 vs 问题、sl 问题、prism 问题还是视频项目问题。或者我的问题,brrrrr。
  • 下载您的应用并运行。除了必须取消阻止并从各种文件中删除只读之外,将颜色更改为红色确实会立即更新。我发现你的项目没有问题。您是否有一套重现步骤来确保我们运行正确的页面?
  • (奇怪的是取消阻止和只读文件)。复制步骤在 EDIT 中,但如果您说这对您有用……这是另一台计算机,发生在其他项目中。您是从 MVC 项目启动应用程序吗? (不是直接从 SL 一开始),尝试至少 3 次更改并从 MVC 执行。怪怪的。谢谢顺便说一句。
  • @Jesus Rodriguez:+1 提供了如此多的细节,但您能否“准确地”描述一下您是如何从 MVC 页面运行 Silverlight 应用程序的。编辑没有那么多细节,从下载的项目中(对我来说)并不明显。

标签: silverlight prism


【解决方案1】:

过去,我遇到过 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 文件。

【讨论】:

    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2020-08-28
      • 2011-05-18
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      相关资源
      最近更新 更多