#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));
}
});
}
}
Я выполнил следующие шаги:
- После начальной загрузки оба
CanGoForward
иCanGoBack
возвращаютfalse
, что правильно, потому что в истории есть только запись. - Если я собираюсь щелкнуть ссылку в браузере, метод будет вызван снова. На этот раз
CanGoForward
иCanGoBack
снова оба возвращаютfalse
, что меня немного смущает, потому что была загружена новая страница. - Если я затем нажму на кнопку
BtnBack
, браузер перейдет обратно на первую страницу, и будет вызван метод. NowCanGoBack
istrue
иCanGoForward
isfalse
, которые, по-видимому, являются правильными значениями для второго шага.
Поскольку всегда доступны значения из предыдущего шага, я предполагаю, что событие повышено / метод вызывается до добавления новой записи истории. Во время отладки моего кода метод будет вызван до того, как новая страница будет отображена в браузере, что подтверждает мое предположение.
Итак, вопрос в том, существует ли альтернативное событие, которое вызывается после успешной загрузки страницы в браузере? Я не смог найти соответствующий метод с intellisense или в документации.
Комментарии:
1. Вероятно bitbucket.org/chromiumembedded/cef/issues/2624 /…
2. Будет включено в версию
73
, см. github.com/cefsharp/CefSharp/issues/2696 для получения подробной информации о выпуске.3. Большое вам спасибо. Я ценю ваши усилия. Продолжайте в том же духе!