1

ダイナミックに生成されたハイパーリンクがクリックされたときに、Lotus Notes文書を開く必要があります。私は以下のコードを使用してそれを行います。Silverlight InvalidOperationExceptionリンクをクリックしたとき

HyperlinkButton hlb = new HyperlinkButton(); 
hlb.SetBinding(HyperlinkButton.ContentProperty, new Binding("Properties[" + col.DisplayField + "]")); 
hlb.SetBinding(HyperlinkButton.NavigateUriProperty, new Binding("Properties[" + col.LinkField + "]")); 
hlb.Click += new RoutedEventHandler(hlb_Click); 
RootGrid.Children.Add(hlb); 

これは、リンクをクリックしたときに発生するコードです。

static void hlb_Click(object sender, RoutedEventArgs e) 
{ 
    HyperlinkButton hlb = (HyperlinkButton)sender; 
    var hostingWindow = HtmlPage.Window; 
    hostingWindow.Navigate(hlb.NavigateUri); 
} 

蓮のノート文書が正しく開きますが、私はのSystem.InvalidOperationExceptionを得るの詳細は

Description: Failed to navigate to notes://<path to the document> 

Stacktrace: 
at MS.Internal.NavigationHelper.Navigate(Boolean checkUserInitiatedAction) 
at System.Windows.Controls.HyperlinkButton.OnClick() 
at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) 
at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e) 
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName) 

以下に示す注意すべきもう一つの興味深い点は、それが別のスレッドで発生していることであり、したがってhostingWindow.Navigateメソッドが起動されたときにキャッチされません。

アイデア?取り扱うようクリックイベントをマーキング

答えて

0

Silverlight 5を使用して、タスク内でLotus Notesのドキュメントリンクを開くように呼び出しをラップし、エラーを生成せずにリンクを開くことができました。 // <パス:私はちょうどハイパーリンクボタンナビゲーションをやらせることはできません

private void TryOpenDocLink() 
{ 
    TaskScheduler ts = TaskScheduler.Default; 

    Task<bool> task = OpenDocLink(); 

    task.ContinueWith(t => 
    { 
     if (t.Exception != null) 
     { 
      this.SetError(t.Exception.Message, enMessageLevel.Error); 
     } 
    }); 
} 

private Task<bool> OpenDocLink() 
{ 
    TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(); 

    try 
    { 
     var hostWindow = HtmlPage.Window; 
     hostWindow.Navigate(new Uri(DocLinkPath)); 
     tcs.SetResult(true); 
    } 
    catch (Exception) 
    { 
     tcs.SetResult(false); 
    } 

    return tcs.Task; 
} 
0

試してみてください。

​​

私はこの問題を修正することはよく分かりません。エラーは、ハイパーリンクボタン内のクリックイベントコードから発生しています。 Window.NavigateメソッドはNavigationHelperクラスを使用しているので、そのコードではNavigationHelperクラスが使用されていることがわかります。

ハイパーリンクボタンにナビゲーションをさせないだけの理由はありますか?

+0

理由ではなく、通常のウェブアドレスに行くと、それは形式 ノートのある蓮のノートドキュメント(に行かなければならないということですドキュメント>)。 Silverlightでは、ハイパーリンクボタンのクリックは、この形式のターゲットURLでは機能しません。はい、コード内で例外が発生することは間違いありません。それは別のスレッドで発生するため、実際の呼び出しhostingWindow.Navigate(hlb.NavigateUri)ではなくApp.xaml.csにしかキャッチされません。それはナビゲーションを引き起こした。 –

+0

ハイパーリンクボタンのように見える別のタイプのコントロールを使用して、イベントハンドラをクリックイベントに攻撃しないのはなぜですか。 – Bryant

関連する問題