我有一个Silverlight 4.0应用程序,每个主题都有相应的Styles.xaml。我知道要编写什么代码来更改ResourceDictionary和所有代码。基本上我需要你的概念性想法。我的网址中有一个查询字符串,如?uid=3
。主题是基于用户。所以A可以有一个不同于B的主题。据我所知,如果你定义了隐式样式,你可以编写代码来在应用程序的任何地方更改主题,它就可以正常工作。但是,如果您的资源字典定义了显式样式,那么您必须在App.xaml.cs构造函数中强制设置主题。如果我错了,请告诉我!现在问题是用户可以浏览A的配置文件,然后可以转移到B.如果发生这种情况,主题将不会更改,因为App.xaml.cs的构造函数仅在应用程序启动时运行一次。我该如何处理?一种选择是永远不要创建显式样式并将所有样式隐藏起来。你们有其他选择吗?
第二个问题是当用户浏览页面时主题不断变化,我是否需要继续进行webservice调用以检索适用于此特定用户的主题?当您在每个页面中进行额外的Web服务调用时,这将会带来巨大的性能损失。这是可以接受的还是你还有其他更好的选择吗?
P.S:另一个解决方案是我创建一个基页,并在该页面中存储一个_previousUserId。如果currentUserId(从查询字符串中获取)与_previousUserId不匹配,我会调用此特定用户为其个人资料设置的主题,并在进行webservice调用后,调用_previousUserId = currentUserId
(以便下次调用赢了'只要用户在此userId的配置文件上,就可以创建)。但解决方案的另一个问题是:只要Web服务的响应没有得到新主题,页面就会加载旧主题的所有数据。这看起来很麻烦。例如。用户首先访问A的个人资料,以便他的主题将从webservice获取并应用。然后他访问了B的个人资料,但主题仍然是A,直到异步调用才能获得B的主题。
你如何处理所有这些东西?如果我不清楚,请告诉我。
提前致谢:)