2016-06-07 131 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); 
     } 
    } 
}