Моя привязка клавиш inputcommand к главному окну не работает, когда дочернее окно находится в фокусе (то же окно wpf)?

Я столкнулся с одной проблемой с привязкой клавиш ввода команды. Здесь я объясняю свою ситуацию ... Я связал привязку клавиш команды ввода, как показано ниже,

<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>

It works fine. Then i opened the new wpf child window in button click event like below,

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();
    }
}

После открытия дочернего окна привязка клавиш к главному окну не работает, когда дочернее окно находится в фокусе. Если я переключу фокус на главное окно, значит, все в порядке.

Я знаю, что и главное окно, и дочернее окно независимы друг от друга.

Но мой вопрос в том, как я могу сделать так, чтобы мое дочернее окно было сфокусировано, когда я привязал привязку клавиш только к главному окну. Я не хочу устанавливать эту привязку для каждого дочернего окна, потому что в моем случае я использую много дочерних окон.

Кто-нибудь, пожалуйста, предоставьте мне свое предложение?


person Muthalagu    schedule 31.07.2013    source источник
comment
Не могли бы вы установить Focusable = False для своего дочернего окна.   -  person Ravuthasamy    schedule 31.07.2013


Ответы (3)


Привязки клавиш будут работать, только если форма сфокусирована. Вы можете перенаправить каждую команду в новом окне в главное окно

Измените свой конструктор на новое окно, чтобы принять главное окно, и сохраните это окно:

MainWindow mainWindow;
public Window(MainWindow w)
{
   mainWindow = w;
}

Всякий раз, когда выполняется привязка клавиш, просто сделайте что-то вроде этого:

mainWindow.TabPress();

И показать окно с

Window childwindow = new Window(this) { Title = "ChildWindow", Width = 200, Height = 300 };
childwindow.Show();
person a-ctor    schedule 31.07.2013

Можете ли вы попробовать установить привязки ввода в стиле окна (который должен быть определен в App.xaml), чтобы он применялся ко всем объектам окна.

person Jawahar    schedule 01.08.2013

Этот код НЕ ПРОВЕРЕН! (но все равно должно работать: 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.

person Thomas Eggemann    schedule 09.02.2016