gpt4 book ai didi

c# - 以编程方式单击 WPF 按钮

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:00 26 4
gpt4 key购买 nike

我正在尝试将 InputGesture 绑定(bind)到 Button。我的按钮的 XAML 如下所示:

<Button x:Name="StopButton" Content="{Binding StopLabel}" Command="{Binding StopCommand}" IsEnabled="{Binding StartCommand.IsExecuting}" />

StopCommand 在 ViewModel 中实例化:

StopCommand = new Command(_someObject.btnStop_Click);

当我手动单击按钮时,btnStop_Click() 会按预期执行。

现在,我想添加一个 InputGesture(在 CodeBehind 中),以便在单击“Control + S”时运行 btnStop_Click()。我的代码隐藏看起来像这样:

public MainControl()
{
InitializeComponent();
try
{
_cmd = new RoutedUICommand();
_cmd.InputGestures.Add(new KeyGesture(Key.S, ModifierKeys.Control));
CommandBindings.Add(new CommandBinding(_cmd, Interrupt_event_handler));
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}

private void Interrupt_event_handler(object sender, RoutedEventArgs e)
{
if (StopButton.IsEnabled)
{
StopButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
}
}

但是,当我点击“Control + S”时,没有任何反应。

最佳答案

在我看来,您将 Gesture 绑定(bind)到了错误的控件上。

您需要从当前的 Window 访问 InputBindings

像这样:

var window = this.Parent as Window;    
window.InputBindings.Add(new InputBinding(yourStopButtonCommand, new KeyGesture(Key.S, ModifierKeys.Control)));

这背后的技术原因是 InputBindings 不会为未获得焦点的控件执行。输入绑定(bind)的处理程序在可视化树中从焦点元素到可视化树的根(在我们的例子中是窗口)进行搜索。当一个控件没有获得焦点时,他将不会成为该搜索路径的一部分。

关于c# - 以编程方式单击 WPF 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29742851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com