imvincent 2014-11-20T06:04:49+00:00 zhao.qinlong@gmail.com 隐私权保护声明 2014-11-16T06:53:13+00:00 Vincent Zhao http://imvincent.github.io/privacy-policy 隐私权保护声明

Vincent Zhao非常重视信息的保护,在使用Vincent Zhao的所有产品和服务前,请您务必仔细阅读并透彻理解本声明。一旦您选择使用,即表示您认可并接受本条款现有内容及其可能随时更新的内容。

一、适用范围

本声明适用于由Vincent Zhao提供的服务,解释了用户(自然人)信息收集和使用的有关情况。

本声明不适用于由其他社会组织或者个人提供的服务,例如Vincent Zhao搜索结果展现的第三方链接,以及可能包含Vincent Zhao产品和/或服务的网站。Vincent Zhao建议您访问相关网站和/或服务了解其隐私政策。

二、信息收集

  1. 您向Vincent Zhao提供的信息。为了向您提供更好的用户服务,Vincent Zhao会在您自愿选择服务或提供信息的情况下系统自动存储您的个人信息,并将这些信息进行整合。请您在注册时及时、详尽及准确的提供个人资料,并不断更新注册资料。所有原始键入的资料将引用为注册资料。如果因注册信息不真实而引起的问题,由您自行承担相应的后果。请您不要将您的帐号、密码转让或出借予他人使用。如您发现您的帐号遭他人非法使用,应立即通知Vincent Zhao。互联网上不排除因黑客行为或用户的保管疏忽导致帐号、密码遭他人非法使用,此类情况与Vincent Zhao无关。

  2. 日志信息。当您使用Vincent Zhao服务时,服务器会自动记录一些信息,例如您对我们服务的使用情况、IP地址、所访问服务的URL、浏览器的类型和使用的语言以及访问日期和时间等。例如:

    113.65.41.253 - -

    [13/Mar/2011:12:59:59 +0800]

    "www.baidu.com/s?wd=测试&tn=baidu HTTP/1.1"

    "Mozilla/4.0"

  3. 设备信息。某些产品和/或服务包含唯一应用程序编号。当您安装、激活、更新、卸载相关服务或当这些服务定期与Vincent Zhao通信(例如软件的自动更新)时,系统会将此编号以及与安装相关的信息(例如操作系统类型和应用程序版本号)发送给Vincent Zhao。

当您使用具有定位功能的Vincent Zhao服务时,系统会自动处理有关设备的位置信息,以使得您不需要手动输入自身地理坐标就可获得相关服务。例如在Vincent Zhao地图服务中,如果您使用“当前位置”进行地理查询, Vincent Zhao可能会向您提供基于位置的服务。

为了改善用户体验,系统可能会自动存储和设备有关的信息,用以进行服务适配。例如您的硬件型号、操作系统版本等。

  1. 以上数据信息都采用匿名的方式。同时,我们也会对信息采取加密处理,保证信息的安全性。

三、信息使用

  1. Vincent Zhao使用从相关产品和/或服务产生的信息用以改进Vincent Zhao的产品和/或服务,并用于开发新的产品和/或服务。Vincent Zhao还会向您提供个性化的服务,例如向您展现相关程度更高的搜索结果或者推广结果。

  2. Vincent Zhao会以高度的勤勉义务对待这些信息,除非事先获得您的授权或本声明另有规定外,不会将这些信息对外公开或向第三方提供(Vincent Zhao关联公司除外)。

  3. Vincent Zhao不会向无关第三方提供、分享信息。除非Vincent Zhao与合作伙伴共同向您提供您所要求的服务或者共同向您展示您可能感兴趣的内容,且信息为该项产品/服务所必须。

  4. Vincent Zhao可能会对产品使用情况进行统计。同时,Vincent Zhao可能会与公众分享这些统计信息,以展示我们服务的整体使用趋势。这些统计信息不包含您的任何身份识别信息。

  5. 在如下情况下,Vincent Zhao可能会披露您的信息:(1)事先获得您的授权;(2)您使用共享功能;(3)根据法律、法规、法律程序的要求或政府主管部门的强制性要求;(4)以学术研究或公共利益为目的;(5)为维护Vincent Zhao的合法权益,例如查找、预防、处理欺诈或安全方面的问题;(6)符合相关服务条款或使用协议的规定。

四、信息安全

  1. Vincent Zhao非常重视信息安全,Vincent Zhao成立了专责团队,研发和应用多种安全技术和程序等措施严格保护您的信息不被未经授权的访问、使用或泄漏。

  2. 请您使用passport.baidu.com的密保工具服务进一步保障您的信息安全。

五、未成年人信息保护

Vincent Zhao非常重视对未成年人信息的保护。若您是18周岁以下的未成年人,在使用Vincent Zhao的产品和/或服务前,应事先取得您家长或法定监护人的同意。

六、修订

Vincent Zhao随时会对本隐私权保护声明进行修订。Vincent Zhao会在网页中显著的位置发布相关规定以便及时通知您。

附:名词解释

  1. 匿名标示符

匿名标示符通常是一类随机的字符串,通常用于识别包括特定移动设备在内的一些用户设备。例如网络设备MAC地址、国际移动设备身份码等。

  1. Cookie

支持服务器端(或者脚本)在客户端上存储和检索信息的一种机制,通过增加简单、持续的客户端状态来扩展基于Web的客户端/服务器应用。服务器在向客户端返回HTTP对象的同时发送一条状态信息,并由客户端保存。状态信息中说明了该状态下有效的URL范围。此后,客户端发起的该范围内的HTTP请求都将把该状态信息的当前值从客户端返回给服务器,这个状态信息被称为cookie。

如果您还有其他问题和建议,请联系Vincent Zhao。Vincent Zhao会始终致力于充分保护用户信息,并为您提供更优质的体验和服务。

]]>
Picture Square Privacy Policy 2014-09-28T06:53:13+00:00 Vincent Zhao http://imvincent.github.io/picture-square-privacy-policy Effective June 15th 2013


About This Policy

This privacy policy describes the privacy practices of Picture Square product that include a link to this policy.


Personal Information Collection

  • Connecting with social media or other Application. If you connect or share with 3rd party social networking sites, or third-party applications, you are allowing to have access to your Personal Information such site or application.
  • If you send us email or other communications, cases like you contact to technical support, we may retain the content of your communications together with your email address and our responses.

Personal Information Sharing

Picture Square Application may/may not share your personal information:

  • When you agreed to the sharing.
  • Picture Square may not share personal information about consumers with third parties for their own marketing purposes unless the consumer agreed to that sharing.
  • Picture Square may disclose your personal information for the cases that Picture Square required to do so by the law or legal process from an authorized entity.
  • If Picture Square or its part of the business merge or acquired by other company, all or a substantial portion of our assets are acquired by such company. In such cases your information will likely be one of the assets that is transferred.
  • We may share or publish aggregate information that doesn't specifically identify you, such as statistical information about how customers use our products.

Other Privacy Related Issues

Picture Square product may contain links to other sites or Application which owned or runs by 3rd parties. Picture Square will not be responsible for those linked sites or application and respect to such 3rd Party privacy policies.


Changes on Privacy Policy

If we change or update the privacy policy to allow Picture Square to use or share your previously collected personal information in a different way, Picture Square will update the Policy on this web page. We encourage you to periodically visit this page for the latest Picture Square privacy practices.


Copyright © 2014 Vincent Zhao. All Rights Reserved.

]]>
解决口袋档案问题... 2014-09-21T07:54:57+00:00 Vincent Zhao http://imvincent.github.io/kou-dai-dang-an-wen-ti 生活在水深火热的魔都, 总有些事情是逃不掉的...

最近决定处理掉我的口袋档案问题, 网上众说纷纭, 没有一个定论, 遂决定将自己解决问题的过程做一记录, 或许可以帮助一些像我一样的人.


找办法:

  • 档案应该放在户口地人才市场: 在人才市场办理人事代理就能放了,一个月也就20块钱。放人才市场比放在人事局好,可以算工龄,具体的你可以咨询人才市场。
  • 如需要报到证: 报到证一式两份,一份放在档案袋里(也就是派遣证),另一份,你毕业时发到你手里(报到证)。 如果丢失, 一种是复印一份档案里的派遣证去相关单位(是省高教中心不是学校)办理补办, 一种是直接让人才中心把档案里的复印, 用复印件报道或改派, 还有就是半个遗失证明.
  • 档案可以以个人存档的形式放到人才中心, 工龄从报道或改派的时间算起.
  • 一种说法: 档案一旦超过接转时限,将无法被人才服务机构接收。专家特别指出,档案接转时要求密封完好,一旦存档人员因自身问题使封条破损,人才服务机构将拒绝接收该档案。
  • “口袋档案”要尽快向人才服务机构咨询,如果档案袋被打开,里面的资料就得经相关部门核实,如果档案资料遗失,还要到原单位去补充和确认;
  • 关于干部身份 “干部身份”就是所谓的“转正定级”手续。高校毕业生毕业后需持由当地毕业生就业主管部门或人社系统开具的报到证(派遣证)到接收单位工作,工作满一年并填写《大中专毕业生转正定级表》之后方可获得干部身份。报到证连同转正定级表一起,就成了“干部身份”的代名词。   中国北方人才市场专家解释,在实际操作中,诸多事实表明“干部身份”不能丢弃。如落户“门槛”较高城市的毕业生,没有“干部身份”就无法调入;一些事业单位在招聘中也明确要有“干部身份”。报考公务员或在一些事业单位、国企的招录、调动中,如果没有“干部身份”会带来一系列麻烦。   “在原有制度尚无松动迹象前提下,毕业生必须注意保留自己的干部身份。”专家建议,大学生毕业工作满一年后,别忘了办理转正定级手续,这样才能得到全国各地人才服务机构的互认,这不仅是考公务员或进入事业单位核定工资标准的主要依据,也是办理异地调动手续的必备条件。   据了解,每位大学生毕业时都会得到一张《报到证》,规定了持证者在向什么部门报到的时间地点,不按照要求时间和地点报到会导致干部身份丧失。此外,毕业生就业后,学生档案要变为人事档案转到工作单位,如果该单位无资格保存档案,又没有通过单位或个人委托及时转存到人才服务机构,变成所谓的“口袋档案”,将导致干部身份无法获得。   专家提醒说:“到外地工作别忘了将档案挂靠在公共就业服务机构,这样既不影响在当地工作,也不影响职称‘晋级’,工龄还能连续计算,一旦有更好的就业机会,可以顺畅地完成衔接。”
  • 把档案转至单位所在地的人才服务中心。 如果接收你的单位不具备档案管理权,那么你的档案就应该“落户”于单位所在地的人才服务中心。这种方式通常 需要收取一定费用,一般每年三四百左右。 Tips 1: 人才服务机构是什么性质的机构?在编制上,它属于事业单位,在运行上,则实行企业化管理。但实际上, 它履行着部分行政职能,提供的“服务”具有明显的行政属性。这种“半官半商”、“亦官亦商”,在“官”与“商” 之中左右逢源,模棱两可。不少地方人才中心的负责人坚持:“补齐代管费用及相关手续后,再提供人事服务”。 Tips 2: 档案的转递是有规定程序的,在离开学校之前最好弄清楚你的档案在什么时间被转到哪个地方去了。在现阶 段,主管学生分配的单位没有统一,有人事局、人才交流中心、教育局、专门的分配办等,而且档案转进转出比较 麻烦,最好一步到位。 存有“口袋档案”的,则要尽快将档案交回原单位或政府所属 人才服务机构,如果档案袋被打开,里面的资料就要经过相关部门进行核实,如果档案资料遗失,还要到原单位去 补充和确认;跳槽人员将档案遗留在原单位长期未办理转档手续的,要与原单位协商,解决跳槽后的遗留问题,以 便及时将档案转交新单位。
  • 还有一种自己想到的: 如果有认识的朋友在某具有档案保管资质的大型国企的人事组织部门工作, 是否可以走后门把自己档案放在他那里, 统一口径为毕业前实习或其他正当理由放在那里的, 但就是不确定如果上海这边到时候要调档该怎么操作? 如果有类似经验的朋友麻烦给个回复, 先谢过了

行动:


结果:

]]>
Using Microsoft Advertising SDK 2014-07-26T08:33:33+00:00 Vincent Zhao http://imvincent.github.io/using-ms-advertising-sdk-in-windows-store-xmalc-app Install SDK:

Since this sdk is included in vs2013 already, when you have vs2013 installed, this step is done already: you could check it using vs2013 Extension and Updates manger.

Walkthroughs:

  1. In Package.appxmanifest, ensure that the internet client check box has been checked in the Capabilities tab.
  2. Add sdk reference in your project: Microsoft Advertising SDK for Windows 8.1.
  3. Now you could use the sdk in your xaml code like below or use it in c# code behind as ohter UIElement.
<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:My_Windows_8._1_Ad_Funded_XAML_App" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:UI="using:Microsoft.Advertising.WinRT.UI" 
    x:Class="My_Windows_8._1_Ad_Funded_XAML_App.MainPage" 
    mc:Ignorable="d">
    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> 
          <UI:AdControl ApplicationId="d25517cb-12d4-4699-8bdc-52040c712cab" 
                        AdUnitId="10043107" 
                        HorizontalAlignment="Left" 
                        Height="250" 
                        VerticalAlignment="Top" 
                        Width="250"/>
    </Grid>
</Page>
  1. Change the AdUnitId property listed in the TestMode topic (http://msdn.microsoft.com/en-us/library/advertising-windows-test-mode-values(v=msads.10).aspx) can give you diffenent ad types. Note that the width and height property can only be set match or greater than the size of current ad type, or the add may not displayed.
  2. Use xml or other config methord to change property between Debug and release will be convenient.
  3. Go to ms pubCenter to register your ApplicationID and AdUnitIDs for your release version.
  4. When you submit your app to windows store, you should know this Windows Store Requirements for the Advertising SDK:
    • Your app must have an Age rating of at least 12+ in the Windows Store to receive Ads.
    • Your app must provide notice and obtain consent for user, for more information, you could visit msdn page: http://msdn.microsoft.com/en-US/library/advertising-windows-store-submission%28v=msads.10%29.aspx
]]>
VS常用快捷键记录 2013-12-31T06:14:22+00:00 Vincent Zhao http://imvincent.github.io/vs-shortcuts 整理一下VS常用的一些快捷键在这里, 想起来哪个会再追加:

  1. 某行空白处Ctrl+C,Ctrl+X: 复制,剪切整行;
  2. CTRL+.: 自动加namespace;
  3. CTRL+E,D: 自动排版;
  4. CTRL+E,C: 自动注释;
  5. Tab+Tab: 调出代码段, 比如Try+Tab+Tab,会自动trycatch.
  6. Ctrl +]: 在前后括号之间切换.
  7. Shift + Home(End): 选中从光标起到行首(尾)间的代码;
  8. Ctrl+Shift+7(8): 在方法定义和调用之点切换;
  9. Shift+Tab: 减少缩进;
]]>
使用git作为项目管理的工具 2012-12-15T06:14:22+00:00 Vincent Zhao http://imvincent.github.io/using-git-in-your-work 首先,git是用来干什么的?如果不清楚这点就不用往下看了,如果您是git使用方面的高手也不用看了,因为此文的作者还处于git使用的初级阶段。 作为一个码农的我,从第一次使用git就被它强大的魅力吸引住了,由于自己太过懒惰的缘故,很多时候会要用的时候会突然想不起来git的相关命令和参数,遂决定开此篇文章来记录自己用过并且以后会用到的git操作,也希望此文能帮到正在看这篇文章的您,本文会不定期更新!

  1. git设置:

    git config --global user.name "Vincent":设置用户名
    git config --global user.email zhao.qinlong@gmail.com:设置邮箱
    
  2. 建立仓库(repo):

    git init <dirname>: 在本地建立git仓库
    git --bare init <dirname>:在远程建立git仓库
    

    两者区别在于:执行git init将在当前目录下建立一个.git目录存放git库,当前目录则作为工作目录存放工程文件;而--bare参数则是将当前目录用做git库目录,而 不再建立一个.git子目录。一般在本地初始化仓库使用git init,而初始化远程仓库则加上--bare参数。因为远程仓库一般只是用来存放git库而已,没人会在远程仓库中进行check out或者编辑文件等操作。

  3. 几个概念:

    working tree:当下的工作目录,就像svn checkout出来的工作目录;
    staging area:git独有功能,是一块暂存的cached区域,用来记录什么是你待会要commit的档案;
    
  4. 将档案添加到git的staging area:

    git add  .:加入当前目录下的所有档案,包括所有还没有被追踪(untracked)的档案;
    git add -i:进入互动模式来添加,你甚至可以只添加档案里面其中的一段程序代码到staging area中去(称作patch);
    git add -u:只加更新的档案,不加入还没有追踪的档案(跟git commit -a 涵盖的范围相同)
    

    注意:add完之后进行的commit是对于add操作之前的档案进行的commit,假如add之后又进行了修改,则此修改不会出现在commit当中

  5. git status:

    changed but not updated:有修改但是没有加入staging area的档案
    changed to be commited(staging area):已经加入staging area的档案 
    Untracked:尚未被追踪的新档案
    
  6. git commit:将staging area的东西提交到本地档案库:

    git commit -m "blah":如果沒加 -m 的話, 会打开编辑器输入 commit log (可以在.gitconfig中設定编辑器) 
    git commit -a -m "foobar":全部修改的档案都 add 後 commit 出去 (不包括 untracked 的新档案) 
    git commit -v:会打开编辑器加上 diff 注解
    
  7. 比较差异:

    git diff:比较 working tree 和 staging area
    git diff --cached:比较staging area和本来的 repo
    git diff HEAD:比较 working tree 跟本来的 repo
    
  8. 分支操作:

    git checkout -b develop master:从master分支创建一个develop分支用于开发进程;
    git checkout master:由其他分支切换到master分支;
    git merge --no-ff develop:将develop分支合并到当前分支;
    git branch -d release-1.2:删除release-1.2分支;
    git branch 建立本地 local branch 
    git branch -m 改名字 (如果有同名會失敗,改用 -M 可以強制覆蓋) 
    git branch 列出目前有那些 branch 以及目前在那個 branch 
    git checkout 切換 branch (注意到如果你有檔案修改了卻還沒 commit,會不能切換 branch,解法稍後會談) 
    git checkout -b () 本地建立 branch 並立即 checkout 切換過去 
    git branch -d 刪除 local branch 
    

    备注:微解释一下,上一条命令的--no-ff参数是什么意思。默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。关于合并的更多解释,请参考Benjamin Sandofsky的《Understanding the Git Workflow》。另外,关于git分支管理的建议,这里有几篇文章值得一读:Git分支管理策略,一个成功的Git分支模型

]]>
C#中Out和Ref的异同 2012-09-10T06:14:22+00:00 Vincent Zhao http://imvincent.github.io/differences-and-similarities-between-out-and-ref ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。

使用ref前必须对变量赋值,out不用。

out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。

区别可以参看下面的代码:

public class OutRef 
{ 
    static void outTest(out int x, out int y) 
    { 
        //离开这个函数前,必须对x和y赋值,否则会报错。  
        //y = x;  
        //上面这行会报错,因为使用了out后,x和y都清空了,需要重新赋值,即使调用函数前赋过值也不行  
        x = 1; 
        y = 2; 
    } 
    static void refTest(ref int x, ref int y) 
    { 
        x = 1; 
        y = x; 
    } 
    public static void OutRefTest() 
    { 
        //out test 
        int a, b; 
        //out使用前,变量可以不赋值 
        outTest(out a, out b); 
        String outMsg = String.Format("a is {0}, b is {1} ", a, b); 
        int c = 11, d = 22; 
        outTest(out c, out d); 
        String outMsg2 = String.Format("a is {0}, b is {1} ", a, b); 
 
        //ref test 
        int m, n; 
        //refTest(ref m, ref n);  
        //上面这行会出错,ref使用前,变量必须赋值 
 
        int o = 11, p = 22; 
        refTest(ref o, ref p); 
        String refMsg = String.Format("a is {0}, b is {1} ", o, p); 
    } 
}
]]>
SSL加密通信原理[转载] 2012-08-29T06:14:22+00:00 Vincent Zhao http://imvincent.github.io/about-ssl 基于网络的电子商务和网上银行等应用极大地方便了我们的生活,受到越来越多人的青睐,而这类应用最基础最重要的东西一定是安全。

SSL(Server Socket Layer)服务套接字层,是Netscape(网景)公司提出的用于internet上安全保密传输信息的协议,它工作于OSI开放系统互连模型的传输层之上,因此在传输层之上的协议,比如http,ftp,smtp等,都可以基于ssl实现安全的网络通信。以下是SSL的基本原理:

要想保证网络通信的安全,我们第一反应就是给传输的数据加密,这也是现行安全传输通用的模式。但在传统加密方式(单密钥,对称加密)下,密 钥不可避免的要被传送于网络节点之间,(除非是写死到各个节点中,不过那样就没有任何灵活性和普适性),在一定强度的网络攻击下,这种加密方式是很脆弱 的。

SSL 的出现解决了这个难题,理解SSL 的关键是理解非对称加密的含义。在对称加密的情况下,源数据A,通过使用密钥B,加密成为密文C。任何人,只要获得了密钥B,就能够对截获的密文C解密, 还原出源数据A。(依靠”算法安全”远不如依靠”密钥安全”);在非对称加密中,出现了“密钥对”的概念,即有一个公共密钥(公钥)和一个私有密钥(私 钥),经公钥加密的密文只能由私钥解密,反过来,经私钥加密的密文只能由公钥解密。这是个重要的特性(数学原理可参考RSA算法),下面的模拟https 通信流程说明了这一特性的重要。

  1. 客户端向服务端发出请求,服务端将公钥(以及服务端证书)响应给客户端;
  2. 客户端接收到服务器端端公钥与证书,验证证书是否在信任域内,不信任则结束通信,信任则使用服务端传过来的公钥生成一个“预备主密码”,返回给服务端。
  3. 服务端接收客户端传过来的“预备主密码”密文,使用私钥解密。非对称加密的安全性也就在于此了,第三方无法获取到“预备主密码”的明文,因为除了服务端,其他任何人是没有私钥的。
  4. 双方使用“预备主密码”生成用于会话的“主密码”。确认后,结束本次SSL 握手,停止使用非对称加密。
  5. 双方使用“主密码”对称加密传输数据,直到本次会话结束。

总结整个流程:先采用非对称加密模式,保证“主密码”只被通信双方获知,而后使用传统的对称加密方式通信,这样,保证了密钥安全(即“主密码”)就 等于保证了数据安全。之所以建立安全连接后,转而使用对称加密,是因为非对称加密的运算量很大,用于“常态”的数据通信十分低效。

以上描述的仅是SSL 协议中加密通信的原理,没有涉及到证书验证,以及客户端,服务端模式。

]]>
WP7页面刷新的深度探索 2012-05-17T08:57:22+00:00 Vincent Zhao http://imvincent.github.io/study-wp7-navigation-refresh-logic 首先说明一下,WP7 更新数据应该采用ObservableCollection来实现,按照WP7的设计意图,是不需要频繁的刷新页面的,数据的更新已经有很完美的实现方式。但是世上就有稀奇古怪的需求,也有稀奇古怪的不爽,前段时间自定义了一个控件,没搞明白怎么实时更新数据源,又不能强迫用户先退出再进入,于是乎,就想到了用个变态的方法实现页面的重新载入。

首先想到有一个现成的页面导航:

NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));

在数据变化结束后重新导航到这个页面,试了下没效果。为什么不能像同页面导航呢,于是想到既然导航是基于URL的,而URL又是可以带参数的,那么带个参数对系统来说,就不是同一个URL了,但实际上还是同一个页面,试了下

NavigationService.Navigate(new Uri("/Page1.xaml?flag=text", UriKind.Relative));

果然就刷新了页面,一阵狂喜,不停地点击,又发现问题了,只有第一次更改数据时能导航过去,再次更改就没效果了,问题有归结为同一个URL问题,于是再次改了导航页面:

NavigationService.Navigate(
      new Uri("/View/Tag.xaml?flag="System.DateTime.Now.ToString("hhmmsss")+,
      UriKind.Relative));

在参数后面跟上一个当前时间,这样每次的URL都是不一样的,就成功的欺骗了系统。这样虽然导航没问题了,但是当用户使用系统的返回键时,就会发现无数个相同页面了,解决的方法也很简单,在页面的初始化函数里,根据导航栈的记录判断是不是刷新后的页面:

foreach (JournalEntry page in App.RootFrame.BackStack.Reverse())
{
   if (page.Source.ToString().IndexOf("Page1.xaml?flag=") > -1)
   {
       App.RootFrame.RemoveBackEntry();
   }
}

注意判断条件是Page1.xaml?flag=,既能过滤掉正常导航过来的页面,又能找出刷新后的页面,至此,这个变态的做法就大功告成了。

]]>
使用XamlReader在后台代码中动态加载xaml 2012-05-14T08:57:22+00:00 Vincent Zhao http://imvincent.github.io/using-xamlreader-load-xaml
T LoadXAMLAndGetShape<T>(string url)
    {
        string xaml = string.Empty;

        StreamResourceInfo sri = Application.GetResourceStream(
                                    new Uri(url, UriKind.Relative));

        using (StreamReader sr = new StreamReader(sri.Stream))
        {
            xaml = sr.ReadToEnd();
        }

        T shape = (T)XamlReader.Load(xaml);

        return shape;
    }

调用方式:

myGrid = LoadXAMLAndGetShape<Grid>(
        "/wp_trade;component/MetroControls/fundsHoldPositionView.xaml");
]]>