Моята 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;
}

Всеки път, когато се изпълнява Keybinding, просто направете нещо подобно:

mainWindow.TabPress();

И покажете прозореца с

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

Можете ли да опитате да зададете Input Bindings в стил Window (който трябва да бъде дефиниран в App.xaml), така че да се прилага за всички обекти Window.

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