这是我第一次使用 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 中注册了一个 View ,完美,我注册了第二个 View ,但它没有显示...好吧,某处有一些错误...但没有。
我意识到第二个 regionManager 的边框没有显示,好的。我评论了注册 View 的行( View 正在工作)并且 View 仍在显示。我评论了 Bootstrap ,将其从 Application_Startup 中删除,没有任何 View 仍然显示(不可能,我的应用程序无法知道如何执行 Shell,全部被注释掉)。
简而言之,我确定如果我删除了 3 个文件,该应用程序仍在运行...我清理了解决方案,从 ClientBin 中删除了 .xap 文件...没有,该应用程序仍在显示 View 等等。换句话说,该应用并未反射(reflect)代码的变化。
这是怎么回事?
谢谢。
编辑:将近一年后......
所以,从那以后我就没有接触过 Silverlight,但今天我想制作一个非常简单的应用程序(只有一个路径和文本框)并且......是的,我的应用程序开始不显示更改。
我无法重现这个错误,我不知道是什么触发了这个,但我知道这是 ASP.NET MVC 的问题。
我这里说的项目和我今天做的项目都是用ASP.NET MVC来启动SL项目的。
我上传了EmailClient项目(只是我们感兴趣的部分)到我的主机:www.foxandxss.net/stuff/EmailClient.rar
很容易看出问题。首先,您可以看到在 Shell.xaml 中,LayoutRoot 的颜色是 Azure,如果您运行该应用程序,它将是绿色(当我今天打开这个应用程序时,我将它更改为绿色并起作用,但没有更多更改)。如果您将颜色更改为另一种颜色,它并没有改变。如果您转到 App.xaml.cs 并注释创建和运行 Bootstrap 的行(因此该应用程序将不会运行),该应用程序仍会打开。就像正在运行的应用程序是一些缓存,您所做的每一次更改,您都不会看到它。
我尝试从 MVC 项目中删除 xap,但什么也没有。
问题是,如果您右键单击 SL 项目并单击“在浏览器中查看”,您将看到更改(如果您评论了 boostrapper,则为 Azure BG 或什么也没有)但是如果您从 MVC 项目运行它,什么也没有.
最佳答案
过去,我遇到过 XAP 文件缓存问题。如果这是问题所在,我会在 xap 文件路径旁边注入(inject)一个虚拟参数(在本例中为时间戳):
<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 文件。
关于silverlight - 我的 Silverlight 应用程序不显示更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4026444/