Я пытаюсь добавить функциональность, позволяющую пользователю «увеличивать масштаб» на веб-странице, отображаемой в графическом интерфейсе WPF моего приложения WPF, с помощью клавиатуры ,WPF XAML Grid-KeyBinding не работает
У меня есть следующие функции в коде-за моего XAML:
private void zoomInExecuted(object sender, ExecutedRoutedEventArgs e)
{
Console.WriteLine("'zoomInExecuted() called. ");
browser.ZoomLevel++;
}
Чтобы включить эту функцию, чтобы назвать, я добавил следующие <Grid.InputBindings>
теги к <Grid>
, которые я использую для отображения 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(...)
должна быть вызвана, когда кнопка +
нажата на клавиатуре, когда сетка displayin g браузер имеет фокус.
Но, когда я запускаю свое приложение и нажимаю внутри браузера, чтобы убедиться, что он имеет фокус, если я затем нажимаю «+» на клавиатуре, ничего не происходит, и я даже не вижу отладки от моей функции zoomInExecuted()
в консоли, поэтому кажется, что нажатие клавиши «+» фактически не вызывает эту функцию. Правильно ли я сделал KeyBinding
? Что-то мне не хватает в моем коде здесь?
Редактировать
Я попытался с помощью ICommand
, как это было предложено в ответах:
public ICommand zoomInCommand
{
get
{
_zoomIn = new DelegateCommand(zoomInExecuted()); //CallZoomIn());
return zoomIn;
}
}
и называя это в KeyBinding
в XAML:
<KeyBinding Key="Add" Command="{Binding Path=zoomInCommand}"></KeyBinding>
но I 'Получает ошибку компиляции в C#, которая гласит:
Тип или пространство имен имя «DelegateCommand» не может быть найден (вы пропали без вести с помощью директивы или ссылка на сборку?)
ли мне нужно добавить конкретную ссылку или using
заявление для того, чтобы быть в состоянии использовать это?
Редактировать
Я также попытался добавить <KeyBinding ...>
теги, как в <Grid>
, что держит объект браузера, и сам браузер в XAML, т.е.
<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+
на клавиатуре никогда не регистрируется приложением ...
Есть ли EventHandler
/KeyboardListener
или что-то подобное, что мне нужно добавить в приложение?
'Command = {{Binding Path = zoomInExecuted}" означает привязать свойство Command к свойству 'zoomInExecuted' типа' ICommand', а не к методу, который вы пытаетесь сделать. Прочитайте ссылки на команды. – Clemens
Вам нужен код, который прикрепляется к событию и выполняет его, построенный как ICommand. Взгляните на ответы здесь: http://stackoverflow.com/questions/939388/binding-commands-to-events –