У меня есть динамически сгенерированная гиперссылка, которая при нажатии должна открыть документ с примечаниями лотоса. Я делаю это, используя код ниже.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);
}
документ Lotus Notes открывает правильно, но я получаю 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.
Любые идеи?
Причина, почему я не могу просто позволить кнопку гиперссылкой сделать навигацию в том, что вместо того, чтобы идти на обычный адрес веб-сайта он должен перейти в документ Lotus Notes (который нот формы : // <путь к документу>). В кликах Silverlink гиперссылки не работают с этой формой целевых URL-адресов. Да, вы правы, что исключение происходит в их коде. И так как это происходит в другом потоке, и поэтому попадает только в App.xaml.cs, а не в фактический вызов hostingWindow.Navigate (hlb.NavigateUri); что вызвало навигацию. –
Так почему бы просто не использовать другой тип управления, который выглядит как кнопка гиперссылки и атакует обработчик события события click. – Bryant