这是我第一次使用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项目中删除xap,什么都没有。
问题是,如果您右键单击SL项目并单击“在浏览器中查看”,您将看到更改(Azure BG或如果您评论了boostrapper,则没有任何内容)但是如果您从MVC项目运行它,则没有任何内容
答案 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>