CefSharp ChromiumWebBrowser-允许用户放大/缩小

Nob*_*fer 4 wpf user-interface xaml view cefsharp

我使用库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>
Run Code Online (Sandbox Code Playgroud)

我怎么会添加功能,允许用户在放大和缩小的内容cefSharp:ChromiumWebBrowser ...>在此XAML?理想情况下,我希望他们能够使用'Shift +'/'Shift - '/'Shift and Scroll'进行放大/缩小.

任何人有任何建议,或能够指出一个如何实现这个的例子?

编辑

所以我设法通过slider在GUI中添加一个来实现功能:

<Slider x:Name="slider" Maximum="100" ValueChanged="zoom" HorizontalAlignment="Left" Margin="1177,260,0,0" VerticalAlignment="Top"/>
Run Code Online (Sandbox Code Playgroud)

并使用它来调用我已命名的函数zoom()- 其中我将browser.ZoomLevel属性设置为slider.Value:

public void zoom(object sender, RoutedEventArgs e)
{
    browser.ZoomLevel = slider.Value;
}
Run Code Online (Sandbox Code Playgroud)

但是,这当前通过单击sliderGUI上的对象并向左/向右拖动光标来工作,但是当您移动滑块时,它似乎从一个值"跳转"到下一个值,而不是逐渐更改它/使查看顺利放大/缩小.

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

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

小智 9

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

为此,您必须设置缩放级别增量

browser.ZoomLevelIncrement = 0.5;
Run Code Online (Sandbox Code Playgroud)

如何使用键盘快捷键(例如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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)