CefSharp ChromiumWebBrowser — разрешить пользователю увеличивать/уменьшать масштаб

Я использую ChromiumWebBrowser, предоставленный библиотекой CefSharp, чтобы пользователи могли просматривать и взаимодействовать с веб-сайтом из моего приложения C#.

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

Теперь я хочу добавить функциональность, позволяющую пользователям увеличивать/уменьшать масштаб при просмотре веб-сайта из моего приложения, но я не уверен, как это сделать... большая часть того, что я нашел в Интернете, похоже, указывает на то, что Я должен использовать атрибут LayoutTransform тега <Grid>, а затем тег <ScaleTransform> в моем XAML, и я пробовал это, но не могу заставить его работать...

Мой XAML выглядит следующим образом:

<Grid x:Name="grdBrowserHost" MinHeight="900" Height="Auto" MinWidth="1200" Width="Auto" Margin="0,0,0,0" DockPanel.Dock="Bottom" Grid.ColumnSpan="1" >
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.LayoutTransform>
        <ScaleTransform ScaleX="{Binding Path=Value, ElementName=_zoom}" ScaleY="{Binding Path=Value, ElementName=_zoom}" />
    </Grid.LayoutTransform>
    <cefSharp:ChromiumWebBrowser Name="browser" Height="Auto" Width="Auto" Grid.Row="0" Address="www.google.com" Margin="0,35,-0.2,0" />
</Grid>

Как мне добавить функциональность, позволяющую пользователю увеличивать и уменьшать масштаб содержимого cefSharp:ChromiumWebBrowser ...> в этом XAML? В идеале я хочу, чтобы они могли увеличивать/уменьшать масштаб с помощью «Shift+»/«Shift-»/«Shift and Scroll».

У кого-нибудь есть какие-либо предложения или может указать мне на пример того, как это реализовано?

Изменить

Так что мне удалось в некоторой степени реализовать эту функциональность, добавив slider в графический интерфейс:

<Slider x:Name="slider" Maximum="100" ValueChanged="zoom" HorizontalAlignment="Left" Margin="1177,260,0,0" VerticalAlignment="Top"/>

и используя это для вызова функции, которую я назвал zoom()-, в которой я установил атрибут browser.ZoomLevel равным slider.Value:

public void zoom(object sender, RoutedEventArgs e)
{
    browser.ZoomLevel = slider.Value;
}

Тем не менее, в настоящее время это работает, щелкнув объект slider в графическом интерфейсе и перетащив курсор влево/вправо, но кажется, что при перемещении ползунка масштаб «перескакивает» с одного значения на другое, а не изменяется постепенно/заставляя плавное увеличение/уменьшение вида.

Как заставить дисплей плавно увеличивать/уменьшать масштаб, когда пользователь перемещает ползунок, а не переходить от «обычного вида» к максимальному значению (100)?

Как добавить функцию увеличения/уменьшения масштаба с помощью сочетаний клавиш (например, CTRL+/CTRL-), а не с помощью slider?


person Noble-Surfer    schedule 07.06.2016    source источник


Ответы (2)


Как заставить дисплей плавно увеличивать/уменьшать масштаб, когда пользователь перемещает ползунок, а не переходить от «обычного вида» к максимальному значению (100)?

Для этого вы должны установить приращение уровня масштабирования

browser.ZoomLevelIncrement = 0.5;

Как добавить функцию увеличения/уменьшения масштаба с помощью сочетаний клавиш (например, CTRL+/CTRL-), а не с помощью ползунка?

Здесь приведенные ниже коды используются для увеличения/уменьшения масштаба с помощью Ctrl+Колесо мыши.

private void OnPreviewKeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == Key.RightCtrl || e.Key == Key.LeftCtrl)
    {
        isControlKeyPressed = false;
    }
}

private void OnKPreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.RightCtrl || e.Key == Key.LeftCtrl)
    {
        isControlKeyPressed = true;
    }
}

private void OnMouseWheel(object sender, MouseWheelEventArgs e)
{
    if (isControlKeyPressed)
    {
        if (e.Delta > 0 && browser.ZoomLevel <= maxZoomLevel)
        {
            browser.ZoomInCommand.Execute(null);
        }
        else if (e.Delta < 0 && browser.ZoomLevel >= minZoomLevel)
        {
            browser.ZoomOutCommand.Execute(null);
        }
    }
}
person Saravanan    schedule 30.08.2016

Я добавил масштабирование клавиатуры. В разделе init подпишитесь на события

cefBrowser.PreviewMouseWheel += CefBrowser_PreviewMouseWheel;
cefBrowser.KeyUp += CefBrowser_KeyUp;

Я использовал PreviewMouseWheel, чтобы избежать прокрутки во время масштабирования (e.Handled = true).

private void CefBrowser_PreviewMouseWheel(object sender, MouseWheelEventArgs e) {

  if (Keyboard.Modifiers != ModifierKeys.Control)
    return;

  if (e.Delta > 0)
    cefBrowser.ZoomInCommand.Execute(null);
  else
    cefBrowser.ZoomOutCommand.Execute(null);
  e.Handled = true;
}

private void CefBrowser_KeyUp(object sender, KeyEventArgs e) {

  if (Keyboard.Modifiers != ModifierKeys.Control)
    return;

  if (e.Key == Key.Add)
    cefBrowser.ZoomInCommand.Execute(null);
  if (e.Key == Key.Subtract)
    cefBrowser.ZoomOutCommand.Execute(null);
  if (e.Key == Key.NumPad0)
    cefBrowser.ZoomLevel = 0;
}

Так что теперь cef масштабируется почти как хром

person vik_78    schedule 21.02.2021