2016-06-07 1562 views
3

我使用CefSharp库提供的ChromiumWebBrowser,以允许用户在我的C#应用​​程序中查看网站并与之交互。CefSharp ChromiumWebBrowser - 允许用户放大/缩小

该网站当前显示正确,用户可以完全与它进行交互,就好像他们正在标准网络浏览器中查看它一样。

我现在想添加的功能,允许用户从我的应用程序中查看网站时放大/缩小,但我不确定如何做到这一点......我在网上找到的大部分似乎表明我应该使用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> 

如何添加功能以允许用户缩放在这XAMLcefSharp:ChromiumWebBrowser ...>的内容中出入?理想情况下,我希望他们能够通过使用'Shift +'/'Shift - '/'Shift and Scroll'来放大/缩小。

任何人有任何建议,或能够指出我如何实施这个例子吗?

编辑

所以我设法通过增加slider到GUI实现的功能在一定程度上:

<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

回答

6

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