我正在使用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'进行放大/缩小。
任何人都有任何建议,或者能够指出我如何实施这个建议的例子?
修改
所以我设法通过向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
?
答案 0 :(得分:8)
如何让显示器像用户一样平滑地放大/缩小 移动滑块,而不是从正常视图中跳过&#39;到了 最大值(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);
}
}
}
答案 1 :(得分:0)
我添加了键盘缩放功能。在 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