[英]In WPF, map click of MenuItem Edit->Undo to TextBox Ctrl-Z key
假设我正在 WPF 中使用文本框和带有“编辑->撤消”选项的菜单制作一个简单的编辑器。 我的 XML 如下:
<Window x:Class="WpfApp4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp4"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<DockPanel LastChildFill="True">
<Menu Name="menu1" DockPanel.Dock="Top">
<MenuItem Header="_Edit">
<MenuItem Name="menu1_edit_undo"
Header="_Undo"
InputGestureText="Ctrl+Z"/>
</MenuItem>
</Menu>
<Grid>
<TextBox Name="textbox1"/>
</Grid>
</DockPanel>
</Window>
如何获取“menu1_edit_undo”的 Click 事件以将按键“Ctrl-Z”发送到 TextBox 组件 textbox1 以调用文本框的撤消功能?
这是我尝试过的但不起作用的方法:
private void menu1_edit_undo_Click(
object sender, RoutedEventArgs e)
{
var e2 = new KeyEventArgs(
keyboard: Keyboard.PrimaryDevice,
inputSource: PresentationSource.FromVisual(textbox1),
timestamp: 0,
key: Key.LeftCtrl | Key.Z
)
{
RoutedEvent= Keyboard.KeyDownEvent
};
textbox1.RaiseEvent(e2);
}
WPF TextBox
有一个Undo
方法( TextBoxBase
基类的一部分) ,它应该可以满足您的需求。
撤消最近的撤消命令。 换句话说,撤消撤消堆栈上最近的撤消单元。
无需尝试将击键发送到控件,只需调用其上的方法:
private void menu1_edit_undo_Click(
object sender, RoutedEventArgs e)
{
textbox1.Undo();
}
好的...我发现您可以通过向您的 WPF 项目添加对 System.Windows.Form 的引用,然后将其添加到 Click 处理程序中来做到这一点:
textbox1.Focus();
System.Windows.Form.SendKeys.SendWait("^z");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.