Включение и отключение кнопок навигации для ChromiumWebBrowser

#c# #cefsharp #chromium-embedded

#c# #cefsharp #встроенный в chromium

Вопрос:

У меня есть следующие кнопки, которые помогают перемещаться в представлении браузера:

 <Button ToolTip="{StaticResource Back}" x:Name="BtnBack" Style="{StaticResource FaButton}" dx:ThemeManager.ThemeName="None" Click="BtnBack_Click">
    <fa:FontAwesome Style="{StaticResource FaIcon}" Name="FaBack" Icon="ArrowLeft" HorizontalAlignment="Center" />
</Button>
<Button ToolTip="{StaticResource Forward}" x:Name="BtnForward" Style="{StaticResource FaButton}" dx:ThemeManager.ThemeName="None" Click="BtnForward_Click">
    <fa:FontAwesome Style="{StaticResource FaIcon}" Name="FaForward" Icon="ArrowRight" HorizontalAlignment="Center" />
</Button>
<Button ToolTip="{StaticResource BackToMenu}" x:Name="BtnHome" Style="{StaticResource FaButton}" dx:ThemeManager.ThemeName="None" Click="BtnHome_Click">
    <fa:FontAwesome Style="{StaticResource FaIcon}" Icon="Home" HorizontalAlignment="Center" />
</Button>
  

Я хочу изменить цвет кнопок BtnBack/FaBack и BtnForward/FaForward в зависимости от того, возможна ли навигация вперед / назад. Поэтому я использую следующий метод, который привязан к LoadingStateChangedEvent :

 private void CwbBrowser_LoadingStateChanged(object sender, CefSharp.LoadingStateChangedEventArgs args) {
    if (!args.IsLoading) {
        Application.Current.Dispatcher.BeginInvoke((Action)delegate {
            if (!CwbBrowser.CanGoBack) {
                FaBack.Foreground = new SolidColorBrush(Color.FromArgb(50, 25, 25, 25));
            } else {
                FaBack.Foreground = new SolidColorBrush(Color.FromArgb(255, 68, 68, 68));
            }
            if (!CwbBrowser.CanGoForward) {
                FaForward.Foreground = new SolidColorBrush(Color.FromArgb(50, 25, 25, 25));
            } else {
                FaForward.Foreground = new SolidColorBrush(Color.FromArgb(255, 68, 68, 68));
            }
        });
    }
}
  

Я выполнил следующие шаги:

  1. После начальной загрузки оба CanGoForward и CanGoBack возвращают false , что правильно, потому что в истории есть только запись.
  2. Если я собираюсь щелкнуть ссылку в браузере, метод будет вызван снова. На этот раз CanGoForward и CanGoBack снова оба возвращают false , что меня немного смущает, потому что была загружена новая страница.
  3. Если я затем нажму на кнопку BtnBack , браузер перейдет обратно на первую страницу, и будет вызван метод. Now CanGoBack is true и CanGoForward is false , которые, по-видимому, являются правильными значениями для второго шага.

Поскольку всегда доступны значения из предыдущего шага, я предполагаю, что событие повышено / метод вызывается до добавления новой записи истории. Во время отладки моего кода метод будет вызван до того, как новая страница будет отображена в браузере, что подтверждает мое предположение.

Итак, вопрос в том, существует ли альтернативное событие, которое вызывается после успешной загрузки страницы в браузере? Я не смог найти соответствующий метод с intellisense или в документации.

Комментарии:

1. Вероятно bitbucket.org/chromiumembedded/cef/issues/2624 /…

2. Будет включено в версию 73 , см. github.com/cefsharp/CefSharp/issues/2696 для получения подробной информации о выпуске.

3. Большое вам спасибо. Я ценю ваши усилия. Продолжайте в том же духе!