Silverlight OOBでリンクを開く方法


SilverlightのOOB(Out of Browser)モードはSilverlightのプログラムをユーザーのローカルコンピュータで実行させ、ユーザーがページをロードする時間を節約し、ウェブサイトを入力することなくアクセスできることを実現し、マイクロソフトが私たちに与えた驚喜です.しかし、セキュリティ上の理由から、現在のSilverlightバージョン(3と4)では、OOBモードでHyperlinkButtonを使用してリンクを直接開くことはできません.
 
簡単な解決策は次のとおりです.
 
HyperlinkButtonを使用したClickイベント:
 

 
次に、イベントに次のコードを追加します.
 
using System.Runtime.InteropServices.Automation;//この参照を追加するには
 
 private void Hyp_Click(object sender, RoutedEventArgs e) {
dynamic shell = AutomationFactory.CreateObject("Shell.Application");shell.ShellExecute("http://www.dengfeng.org");
 }
 
以上のコードはOOBモードで実行できますが、ブラウザでは実行できません.
したがって、OOBとブラウザでリンクを開くことができるように、この2つのモードを判断する必要があります.コードは以下の通りです.
 if (AutomationFactory.IsAvailable)
{ 
  dynamic shell = AutomationFactory.CreateObject("Shell.Application");
  shell.ShellExecute(uri.ToString());
}
else if (!System.Windows.Application.Current.IsRunningOutOfBrowser)
{
  System.Windows.Browser.HtmlPage.Window.Navigate(uri, "_blank");
}
else
{
  throw new InvalidOperationException();
}

 
             ,               ,             :
 public static void OpenURL(string url)
        {
            new Thread(() =>
            {
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    if (AutomationFactory.IsAvailable)
                    {
                        dynamic shell = AutomationFactory.CreateObject("Shell.Application");
                        shell.ShellExecute(url);
                    }
                    else if (!System.Windows.Application.Current.IsRunningOutOfBrowser)
                    {
                        System.Windows.Browser.HtmlPage.Window.Navigate(new Uri(url), "_blank");    
                    }
                    else
                    {
                        throw new InvalidOperationException();
                    }
                });

            }).Start();

        }