Silverlight InvalidOperationException при нажатии на ссылку - PullRequest
1 голос
/ 06 октября 2011

У меня есть динамически сгенерированная гиперссылка, при нажатии которой открывается документ с лотосными нотами.Я делаю это, используя приведенный ниже код.

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);
}

документ с примечаниями лотоса открывается правильно, но я получаю Систему.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.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 21 января 2013

Используя 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 голосов
/ 06 октября 2011

Попробуйте пометить событие клика как обработанное:

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

Я не уверен, что это решит проблему.Ошибка исходит из кода события щелчка внутри кнопки гиперссылки.Вы можете сказать, потому что этот код использует класс NavigationHelper, а метод Window.Navigate - нет.

Есть ли причина, по которой вы не просто позволяете кнопке гиперссылки выполнять навигацию?

...