当子窗口聚焦时(同一个wpf窗口),我的inputcommand键绑定到主窗口不起作用
本文关键字:窗口 inputcommand 绑定 我的 不起作用 聚焦 wpf 同一个 | 更新日期: 2023-09-27 18:25:41
我面临一个输入命令键绑定问题。在这里我解释一下我的情况。。。我已经绑定了输入命令键绑定,如下所示,
<Window x:Class="DefaultBehavior_KeyBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.InputBindings>
<KeyBinding Key="F2" Command="{Binding TestCommand}"/>
</Window.InputBindings>
<Grid>
<Button Content="Add" Width="100" Height="35" Grid.Row="0" Name="EmptyButton" Click="EmptyButton_Click"/>
</Grid>
它运行良好。然后我在按钮点击事件中打开了新的wpf子窗口,如下所示,
public partial class MainWindow : Window
{
public ICommand TestCommand { get; private set; }
public MainWindow()
{
this.TestCommand = ........some command is attached here...
InitializeComponent();
this.DataContext = this;
}
private void EmptyTabButton_Click(object sender, RoutedEventArgs e)
{
Window childwindow = new Window() { Title = "ChildWindow", Width = 200, Height = 300 };
childwindow.Show();
}
}
打开子窗口后,当子窗口聚焦时,绑定到主窗口的键不起作用。如果我把焦点切换到主窗口意味着,这很好。
我知道,主窗口和子窗口都是相互独立的。
但我的问题是,当我只将键绑定到主窗口时,我如何才能使我的子窗口集中工作。我不想将此绑定设置为每个子窗口,因为在我的情况下,我使用了很多子窗口。
有人能给我提一下你的建议吗?
只有当Form是焦点时,键绑定才会起作用。您可以将新窗口中的每个命令重定向到主窗口
将构造函数更改为新窗口的构造函数以接受主窗口并保存此窗口:
MainWindow mainWindow;
public Window(MainWindow w)
{
mainWindow = w;
}
每当执行Keybinding时,只需执行以下操作:
mainWindow.TabPress();
并显示带有的窗口
Window childwindow = new Window(this) { Title = "ChildWindow", Width = 200, Height = 300 };
childwindow.Show();
您可以尝试以Window样式设置输入绑定(应该在App.xaml中定义),以便它将应用于所有Window对象吗。
此代码未经过测试!(但它无论如何都应该起作用:D)
您可以将InputBindings
从MainWindow
添加到子窗口InputBindingCollection
,如下所示:
private void EmptyTabButton_Click(object sender, RoutedEventArgs e)
{
Window childwindow = new Window() { Title = "ChildWindow", Width = 200, Height = 300 };
childWindow.InputBindings.AddRange(this.InputBindings);
childwindow.Show();
}
通过这样做,子窗口应该对您的输入做出反应,并执行来自MainWindow
的命令。