Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何处理主题的更改?_C#_Silverlight_Silverlight 4.0_Themes - Fatal编程技术网

C# 我如何处理主题的更改?

C# 我如何处理主题的更改?,c#,silverlight,silverlight-4.0,themes,C#,Silverlight,Silverlight 4.0,Themes,我有一个Silverlight 4.0应用程序,它对应于每个主题的style.xaml。我知道要编写什么代码来更改ResourceDictionary等等。基本上我需要你给我一个概念上的想法。我的URL中有一个查询字符串,如?uid=3。主题是基于用户的。所以A可以有一个不同于B的主题 据我所知,如果您定义了隐式样式,那么您可以编写代码来更改应用程序中的任何位置的主题,结果会很好。但是,如果资源字典定义了显式样式,则必须在App.xaml.cs构造函数中强制设置主题。如果我错了,请告诉我!现在的

我有一个Silverlight 4.0应用程序,它对应于每个主题的style.xaml。我知道要编写什么代码来更改ResourceDictionary等等。基本上我需要你给我一个概念上的想法。我的URL中有一个查询字符串,如
?uid=3
。主题是基于用户的。所以A可以有一个不同于B的主题

据我所知,如果您定义了隐式样式,那么您可以编写代码来更改应用程序中的任何位置的主题,结果会很好。但是,如果资源字典定义了显式样式,则必须在App.xaml.cs构造函数中强制设置主题。如果我错了,请告诉我!现在的问题是,用户可能会浏览A的个人资料,然后可能会切换到B的个人资料。如果发生这种情况,则不会更改主题,因为App.xaml.cs的构造函数在应用程序启动时只运行一次。我该怎么处理?一种选择是永远不要创建显式样式,并保持所有样式都是隐式的。你们还有别的选择吗

第二个问题是,随着用户浏览页面,主题不断变化,我是否需要不断调用webservice来检索适用于此特定用户的主题?当您在每个页面中进行额外的webservice调用时,这将对性能产生巨大的影响。这是可以接受的还是您有其他更好的选择

另一个解决方案是我创建一个基本页面,并在该页面中存储一个_previousUserId。如果currentUserId(从查询字符串中获取)与_previousUserId不匹配,我将调用以查看此特定用户为其配置文件设置了哪个主题,并在webservice调用后,调用
_previousUserId=currentUserId
(因此,只要用户位于此用户ID的配置文件上,就不会进行下次调用)

但解决方案的另一个问题是:只要Web服务没有响应获取新主题,页面就会加载所有包含旧主题的数据。这辆车看起来像马车。用户首先访问A的个人资料,这样他的主题将从webservice中获取并应用。然后他访问B的配置文件,但在异步调用获取B的主题返回之前,主题仍然是A的

你是如何处理这些事情的