1

나는 동적 텍스트 하이퍼 링크를 클릭하면 연꽃 노트 문서를 열어야한다. 나는 아래 코드를 사용하여 그것을한다.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 메서드가 실행될 때 catch되지 않습니다.

아이디어가 있으십니까? 처리 된 클릭 이벤트를 표시

답변

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

시도 :

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

나는이 문제를 해결할 것을 확실하지 않다. 오류는 하이퍼 링크 단추 안의 클릭 이벤트 코드에서 발생합니다. 해당 코드는 Window.Navigate 메서드가 아니라 NavigationHelper 클래스를 사용하기 때문에 알 수 있습니다.

하이퍼 링크 버튼에 탐색을 허용하지 않는 이유가 있습니까?

+0

의 I 그냥 하이퍼 링크 버튼을 탐색 할 수 있도록 할 수없는 이유 대신 일반 웹 주소로가는 그 형태 노트입니다 연꽃 노트 문서 (이동한다는 것이다 : // <경로 문서>). Silverlight에서 하이퍼 링크 단추 클릭은이 형식의 대상 URL에서는 작동하지 않습니다. 예, 코드에서 예외가 발생하는 것은 맞습니다. 그리고 다른 스레드에서 발생하기 때문에 실제 호출 hostingWindow.Navigate (hlb.NavigateUri)보다는 App.xaml.cs에서만 catch됩니다. 이로 인해 탐색이 발생했습니다. –

+0

그래서 하이퍼 링크 단추처럼 보이는 다른 유형의 컨트롤을 사용하고 이벤트 처리기를 click 이벤트에 공격하지 마십시오. – Bryant

관련 문제