【问题标题】:CefSharp ChromiumWebBrowser- allow user to zoom in/outCefSharp ChromiumWebBrowser - 允许用户放大/缩小
【发布时间】:2016-06-07 14:13:47
【问题描述】:

我正在使用CefSharp 库提供的ChromiumWebBrowser 允许用户从我的C# 应用程序中查看网站并与之交互。

该网站当前显示正确,并且用户能够与其完全交互,就像他们在标准网络浏览器中查看它一样。

我现在想添加允许用户在我的应用程序中查看网站时放大/缩小的功能,但我不确定如何执行此操作...我在网络上找到的大部分内容似乎表示我应该使用<Grid> 标签的LayoutTransform 属性,然后在我的XAML 中使用<ScaleTransform> 标签,我已经尝试过了,但似乎无法让它工作......

我的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>

如何添加允许用户放大和缩小此XAMLcefSharp:ChromiumWebBrowser ...&gt; 内容的功能?理想情况下,我希望他们能够使用“Shift+”/“Shift-”/“Shift and Scroll”进行放大/缩小。

任何人有任何建议,或者可以指出一个如何实现的示例?

编辑

所以我通过在 GUI 中添加 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;
}

但是,目前这可以通过单击 GUI 上的 slider 对象并向左/向右拖动光标来工作,但是当您移动滑块时,它似乎会从一个值“跳转”到下一个值,而不是逐渐改变它/使视图平滑地放大/缩小。

当用户移动滑块时,如何使显示平滑地放大/缩小,而不是从“正常视图”跳到最大值 (100)?

如何使用键盘快捷键(例如 CTRL+ / CTRL-)而不是使用 slider 添加放大/缩小功能?

【问题讨论】:

标签: wpf xaml user-interface view cefsharp


【解决方案1】:

如何使显示作为用户平滑放大/缩小 移动滑块,而不是从“普通视图”跳到 最大值(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);
        }
    }
}

【讨论】:

    【解决方案2】:

    我添加了键盘缩放。在 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 像 chrome 一样缩放

    【讨论】:

      猜你喜欢
      • 2013-05-13
      • 1970-01-01
      • 2017-05-28
      • 2012-09-19
      • 1970-01-01
      • 2020-01-27
      • 2015-11-10
      • 2014-05-10
      • 2021-08-02
      相关资源
      最近更新 更多