我创建的方式KeyBinding是这样的:
<KeyBinding Modifiers="Ctrl" Key="S" Command="{Binding SaveCommand}" />
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要两个修改键呢?例如,Ctrl+ Shift.
我正在使用WPF在C#中构建应用程序.如何绑定某些键?
另外,我如何绑定到Windows键?
我需要一种简单的方法来设置菜单项的快捷方式.
但这不适用于快捷方式,只需点击:
<MenuItem Header="Editar">
<MenuItem Header="Procurar" Name="MenuProcurar"
InputGestureText="Ctrl+F"
Click="MenuProcurar_Click">
<MenuItem.ToolTip>
<ToolTip>
Procurar
</ToolTip>
</MenuItem.ToolTip>
</MenuItem>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)
我正在使用WPF 4.0
我正在尝试使用具有键盘快捷键的菜单项创建可本地化的WPF菜单栏 - 而不是加速键/助记符(通常显示为可以按下以在菜单已打开时直接选择菜单项的带下划线的字符),但键盘快捷键(通常是Ctrl+的组合another key)在菜单项标题旁边右对齐显示.
我正在为我的应用程序使用MVVM模式,这意味着我尽可能避免在代码隐藏中放置任何代码并让我的视图模型(我分配给DataContext属性)提供我的视图中控件使用的ICommand接口的实现.
作为重现问题的基础,这里有一些应用程序的最小源代码,如下所述:
Window1.xaml
<Window x:Class="MenuShortcutTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MenuShortcutTest" Height="300" Width="300">
<Menu>
<MenuItem Header="{Binding MenuHeader}">
<MenuItem Header="{Binding DoSomethingHeader}" Command="{Binding DoSomething}"/>
</MenuItem>
</Menu>
</Window>
Run Code Online (Sandbox Code Playgroud)
Window1.xaml.cs
using System;
using System.Windows;
namespace MenuShortcutTest
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
}
Run Code Online (Sandbox Code Playgroud)
MainViewModel.cs
using System;
using System.Windows;
using System.Windows.Input;
namespace MenuShortcutTest
{
public class MainViewModel
{
public string MenuHeader …Run Code Online (Sandbox Code Playgroud) 我以为我自己解决了这个问题,但它回来困扰我的应用程序,所以这里它:
我有一个注册表单中的以下keydown事件处理程序,其中包含几个禁用和只读文本框,它们只是按钮的简单快捷方式:
private void AccountViewForm_KeyDown(object sender, KeyEventArgs e)
{
//e.SuppressKeyPress = true;
//e.Handled = true;
if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.E && !isInEditMode)
btnEditMode_Click(sender, e);
if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S && isInEditMode) btnEditMode_Click(sender, e);
if (e.KeyCode == Keys.Escape) btnCancel_Click(sender, e);
if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.W) Close();
}
Run Code Online (Sandbox Code Playgroud)
表单将KeyPreview设置为true,但只要readonly文本框具有焦点并按Ctrl + E,我就无法获得"Control.ModifierKeys == Keys.Control"和"e.KeyCode == Keys.E"两者都为true同时.真正奇怪的是Ctrl + W有效.任何人都知道到底是怎么回事?:(
我正在尝试制作一个热键(即Ctrl + Y),将焦点更改为文本框.
我是德尔福的移植手术,这让我很困惑.在Delphi 5中,这非常简单.(在标签的标题上,您可以在要制作热键的字母之前添加&.在将标签指向TextBox后,热键将起作用.)
对于WPF,我看到WPF中的可怕示例涉及调用Win32调用或为每个热键(以及其他如此繁重的实现)发出命令.
我发现很难相信1999年推出的IDE和Languange版本(Delphi 5)有一个比Hotkey更简单的系统(比WPF更好).
当然我错过了一些东西.如果你知道,请告诉我它是什么.
我有一个应用程序,其中有UserControl一个工具栏.此工具栏有一个按钮Execute,该按钮又将其命令绑定到ICommand视图模型作为属性公开的派生类.
<Button Grid.Row="0" Command="{Binding ExecuteCommand}">Execute</Button>
Run Code Online (Sandbox Code Playgroud)
现在,我想将它绑定到键盘快捷键(F5).这需要在以后的上下文中绑定,UserControl仅当此用户控件此时可见时才适用.
另一种选择是将它绑定到KeyDown实际包含要执行的文本的文本框中,但是当涉及到如何将事件从控件路由到视图模型中的命令时,我真的很不稳定,而代码中没有真正难看的黑客攻击 - 用户控件的后面.
任何指针都表示赞赏!
我在我的应用程序中使用了 UserControl,我需要为我的应用程序设置快捷键,我放置了此代码,但不起作用。任何人建议请
我的 XAML 代码
<Button Name="ucBtnUpload" ToolTip="Upload F2" Cursor="Hand" Click="ucBtnUpload_Click" KeyUp="ucBtnUpload_KeyUp_1" >
Run Code Online (Sandbox Code Playgroud)
我的代码背后
private void ucBtnUpload_KeyUp_1(object sender, KeyEventArgs e)
{
if (e.Key == Key.F2)
{
Test opj = new Test();
opj.ShowDialog();
}
}
Run Code Online (Sandbox Code Playgroud) 我们为树视图控件创建一个HierarchicalDataTemplate.我们可以使用鼠标单击树项来更改选择.现在,我们想使用键盘上下键来上下移动选择.但它似乎无法奏效.我通过Google和Stackoverflow搜索了很多,但都失败了.
所以我为此创建了一个新线程,你能帮我一下吗?谢谢.
<HierarchicalDataTemplate x:Uid="HierarchicalDataTemplate_1" x:Key="My_data_template" >
<ContentControl x:Uid="ContentControl_1" MouseDoubleClick="MouseDoubleClick" MouseRightButtonDown="MouseRightClick">
<Grid x:Uid="Grid_2" Background="Transparent">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Uid="ColumnDefinition_1" Width="*"/>
<ColumnDefinition x:Uid="ColumnDefinition_2" Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel x:Uid="StackPanel_3" HorizontalAlignment="Left" Orientation="Horizontal" Grid.Column="0">
<TextBlock x:Uid="TextBlock_13" Text="{Binding Name}" VerticalAlignment="Center" Margin="3,0,0,1" TextWrapping="NoWrap"/>
</StackPanel>
<CheckBox x:Uid="CheckBox_3" HorizontalAlignment="Right" Click="CheckBox_Click" Grid.Column="1" ToolTip="On/Off">
</CheckBox>
</Grid>
</ContentControl>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)
另一个问题是,我可以使用鼠标单击文本块来选择项目,但是当我使用鼠标单击CheckBox时,无法选择该项目.有没有在我点击CheckBox时选择了treeview项?
我将模板应用于treeview的方式如下:
<TreeView x:Name="tv_pointcloud" x:Uid="TreeListView_1"
ItemTemplateSelector="{StaticResource DataAccessor}"
......
/>
public class DataAccessor : DataTemplateSelector
{
public DataAccessor()
{
Init();
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var element = container as FrameworkElement;
var template …Run Code Online (Sandbox Code Playgroud) 我有一个WPF应用程序,MainWindow类有<Window.CommandBindings>,<Window.InputBindings>所以我可以检测CTRL+ X,CTRL+ C和CTRL+ V命令.
MainWindow包含一个DataGrid,我想在其中选择一行并使用CTRL+ C命令复制行中的数据.在DataGrid中选择行时,在MainWindow中不再检测到CTRL+ C命令.仍然检测到CTRL+ X和CTRL+ V.
我用一个非常简单的例子设法重现了这个问题.只需复制并粘贴下面的代码,就可以随时编译并运行.然后执行以下操作:
MainWindow.XAML代码
<!-- Commands for hot keys -->
<Window.CommandBindings>
<!-- Source -->
<!-- http://stackoverflow.com/questions/4682915/defining-menuitem-shortcuts -->
<CommandBinding Command="Cut" Executed="btnCut_Click" />
<CommandBinding …Run Code Online (Sandbox Code Playgroud)