我正在尝试添加功能,以允许用户使用键盘在我的WPF应用程序的GUI上ChromiumWebBrowser
中显示的网页上“放大”。
我在XAML的代码隐藏中有以下功能:
private void zoomInExecuted(object sender, ExecutedRoutedEventArgs e)
{
Console.WriteLine("'zoomInExecuted() called. ");
browser.ZoomLevel++;
}
要启用此功能,我已将以下<Grid.InputBindings>
标记添加到我用于显示<Grid>
的{{1}}中:
ChromiumWebBrowser
据我了解,这应该意味着当显示浏览器的网格具有焦点时,在键盘上按下 <Grid x:Name="grdBrowserHost" MinHeight="900" Height="Auto" MinWidth="1205" Width="Auto" Margin="5,0,0,0" DockPanel.Dock="Bottom" Grid.ColumnSpan="1" >
<Grid.InputBindings>
<KeyBinding Key="Add" Command="{Binding Path=zoomInExecuted}"></KeyBinding>
</Grid.InputBindings>
...
</Grid>
按钮时应调用zoomInExecuted(...)
函数。
但是,当我运行我的应用程序,并在浏览器中单击以确保它具有焦点时,如果我按下键盘上的“+”,则没有任何反应,我甚至没有看到来自{{1在控制台中的函数,所以似乎按下'+'键实际上并没有调用该函数。我是否正确完成了+
?我的代码中是否有我遗漏的东西?
修改
我已尝试使用zoomInExecuted()
,如答案所示:
KeyBinding
并在XAML中的ICommand
中调用它:
public ICommand zoomInCommand
{
get
{
_zoomIn = new DelegateCommand(zoomInExecuted()); //CallZoomIn());
return zoomIn;
}
}
但是我在C#中遇到了编译错误:
找不到类型或命名空间名称'DelegateCommand'(您是否缺少using指令或程序集引用?)
我是否需要添加特定的引用或KeyBinding
语句才能使用它?
修改
我还尝试将<KeyBinding Key="Add" Command="{Binding Path=zoomInCommand}"></KeyBinding>
标签添加到持有浏览器对象的using
和XAML中的浏览器本身,即
<KeyBinding ...>
但<Grid>
函数似乎永远不会被调用(我从未在控制台中看到此函数的调试) - 似乎按下键盘上的<Grid x:Name="grdBrowserHost" MinHeight="900" Height="Auto" MinWidth="1205" Width="Auto" Margin="5,0,0,0" DockPanel.Dock="Bottom" Grid.ColumnSpan="1" >
<Grid.InputBindings>
<KeyBinding Modifiers="Ctrl" Key="Add" Command="{Binding zoomInExecuted}"></KeyBinding>
</Grid.InputBindings>
...
<cefSharp:ChromiumWebBrowser Name="browser" Height="Auto" Width="Auto" Grid.Row="0" Address="https://web.riviam.com" Margin="25,35,-0.2,0" >
<cefSharp:ChromiumWebBrowser.InputBindings>
<KeyBinding Modifiers="Ctrl" Key="Add" Command="{Binding zoomInExecuted}"></KeyBinding>
</cefSharp:ChromiumWebBrowser.InputBindings>
</cefSharp:ChromiumWebBrowser>
永远不会被应用程序注册。 ..
我需要在应用程序中添加zoomInExecuted(...)
/ CTRL+
或类似内容吗?
答案 0 :(得分:1)
您无法绑定到某个功能,您必须使用Command
:
<KeyBinding Key="Add" Command="{Binding ZoomInCommand}"></KeyBinding>
public ICommand ZoomInCommand
{
get
{
_zoomIn = new DelegateCommand(CallZoomIn());
return zoomIn;
}
}
DelegateCommand是Microsoft.Practices.Prism的一部分。您可以下载here
大多数MVVM框架也包括它。
答案 1 :(得分:0)
缺少方法链接部分的Icommand。否则一切都是正确的。要执行方法,您需要具有ICommand类型的属性。然后使用该属性调用所需的方法。请看链接。创建了relay命令,可以将其用作通用命令,您可以在其中传递要执行的方法
答案 2 :(得分:0)
你无法绑定一个函数。您需要为绑定创建 ICommand 。
假设您在整个应用中实施了MVVM模式,则需要实施 RelayCommand 。