Панель навигации в WebBrowser

WPF
  1. 6 года назад

    Добрый день. Вопрос краткий, и, думаю достаточно простой (могу, конечно, ошибаться). Как к компоненту WebBrowser привязать стрелки навигации наподобие тех, что появляются при NavigationWindow или Page?
    Спасибо.

  2. Alexandr_Erohin

    Sep 30 Администратор

    Базовая разметка:

    <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <!-- Кнопки -->
            <StackPanel Orientation="Horizontal">
                <Button x:Name="Back" Width="24" Height="24" Padding="4" Margin="5" Click="Back_Click_1">
                    <Path Stroke="Black" StrokeThickness="1" Stretch="Fill" Fill="Black"
                          Data="F1 M 36,22L 36,26L 19.75,26L 27,33L 20.5,33L 11,24L 20.5,15L 27,15L 19.75,22L 36,22 Z"/>
                </Button>
                <Button x:Name="Forward" Width="24" Height="24" Padding="4"  Margin="0,5" Click="Forward_Click_1">
                    <Path Stroke="Black" StrokeThickness="1" Stretch="Fill" Fill="Black"
                          Data="F1 M 12,22L 12,26L 28.25,26L 21,33L 27.5,33L 37,24L 27.5,15L 21,15L 28.25,22L 12,22 Z"/>
                </Button>
            </StackPanel>
            <!-- Браузер -->
            <WebBrowser x:Name="webBrowser" Source="http://www.professorweb.ru" Grid.Row="1"></WebBrowser>
    </Grid>

    Обработчики кликов для кнопок:

    private void Back_Click_1(object sender, RoutedEventArgs e)
     {
                if (webBrowser.CanGoBack)
                {
                    webBrowser.GoBack();
                }
    }
    
    private void Forward_Click_1(object sender, RoutedEventArgs e)
     {
                if (webBrowser.CanGoForward)
                {
                    webBrowser.GoForward();
                }
     }
  3. Добавлено 6 года назад oygemor

    Спасибо, попробую. Дабы не плодить тем в форуме, задам еще один вопрос в эти ветке. Как в компоненте WebBrowser отследить статус http ответа, иначе говоря мне нужно, например, при ошибочной навигации (когда "ie не может отобразить страницу", то есть 404) переадресовывать на свою статичную страницу? Либо для этого использовать frame, там, как я понял с этим попроще-можно перехватывать событие, и вручную организовывать историю навигации ?

  4. Alexandr_Erohin

    Oct 1 Администратор

    Обрабатывайте событие Navigating элемента WebBrowser и в обработчике проверяйте ответ сервера через классы, предназначенные для работы с Http. Если ответ возвращает ошибку сервера передайте WebBrowser'у новую страницу.

  5. Спасибо за наводку. Организовал перехватом исключения во время обращения к несуществующей странице и перенаправлением на свою сатичную страницу. Нужно будет попробовать как это скажется на истории навигации-не получится ли замкнутый круг при переходе назад...

  6. Я тут из забугорных форумов узнал, что в событии Navigating объекта webbrowser e.WebResponse ВСЕГДА равно null, хотя аналогичный параметр во frame вполне себе содержит данные. Не понятно это баг или фича. Но пока решение не найдено - придется пользоваться frame. Но таи у меня другая проблема-нужно обрабатывать историю вручную. Есть ли у вас пример, как работать с историей?

  7. И еще, Frame не отслеживает перемещение по внешним ресурсам, например навигацию по интрасети. Не генерируется событие Navigating, соответственно, для моей задачи целесообразность использования Frame отпадает. Остается только WebBrowser со своими недостатками....

или зарегистрируйтесь чтобы ответить