Справка по Windows WPF - PullRequest
       27

Справка по Windows WPF

1 голос
/ 06 января 2010

Я разрабатываю систему XAML, которая в настоящее время включает значок на панели задач, на который пользователь должен навести курсор, чтобы открыть главное окно.Однако мне нужно принять во внимание доступность из-за юридических вопросов, а также сделать системную привлекательность для максимально широкого круга пользователей.Чтобы сделать систему более доступной, я пытаюсь создать ярлык Windows, который позволит открывать главное окно программы из любой точки окна.

Код, над которым я работал, имеет 2 ошибки, во-первых, обработчик событий срабатывает только в том случае, если фокусом является само приложение, а необходимые мне ярлыки должны открываться, когда другие окна находятся в фокусе и т. д.он не обнаруживает нажатие Alt & Q одновременно.Код, который я создал, можно найти ниже, я просто ищу способ обработки ярлыков Alt & Q из любого места в среде Windows и определения, какие кнопки были нажаты, чтобы окно могло открываться.

Любая помощь или совет будут оценены.

this.KeyDown += new System.Windows.Input.KeyEventHandler(this.Window_Keydown);

private void Window_Keydown(object sender, KeyEventArgs e)
    {
        if ((e.KeyboardDevice.Modifiers == ModifierKeys.Alt) && (e.Key == Key.Q)){}
    }

Ответы [ 2 ]

3 голосов
/ 08 января 2010

Два комментария:

Во-первых, я бы избавился от требования "зависания". Если вы используете стандартный метод добавления приложения на панель задач, например System.Windows.Forms.NotifyIcon, вы должны открыть окно приложения при двойном щелчке. При желании вы также можете добавить контекстное меню правой кнопкой мыши. Таким образом, пользователь может использовать winkey + B, чтобы перейти в системный трей, и влево / вправо, чтобы найти свой значок, ввести, чтобы дважды щелкнуть мышью, или клавишу приложения, чтобы щелкнуть правой кнопкой мыши.

Если по какой-то причине это не работает в вашем конкретном сценарии. Я бы порекомендовал проверить, запущено ли ваше приложение в событии Application_Start (это работает только в том случае, если вы хотите один экземпляр вашего приложения в любое время). Таким образом, если пользователь запускает приложение, а экземпляр приложения уже открыт, просто восстановите состояние окна и выведите его на передний план.

Затем во время установки вы можете установить стандартный ярлык Windows на рабочем столе или в меню «Пуск» и установить горячую клавишу в свойствах ярлыка (все это можно сделать в коде). Затем, когда пользователь вводит комбинацию клавиш, она запускает приложение, запускается Application_Start, он видит, что уже запущена версия (в панели задач), и выводит ее на передний план. Таким образом, достижение того же результата более стандартным способом.

Надеюсь, я правильно понял, чего вы хотите достичь.

1 голос
/ 06 января 2010

Возможно, вам следует взглянуть на RoutedCommand объекты и свойство InputGestures

Вот MSDN RoutedCommands и как его настроить:

http://msdn.microsoft.com/en-us/library/system.windows.input.routedcommand.aspx

Обычно у вас есть команда: ProcessDataCommand

public class MyCommands
{ 
    public static readonly RoutedCommand ProcessDataCommand = new RoutedCommand();
}

Установите его для вашего пункта меню или кнопки следующим образом:

<Button Command="{x:Static NameSpace:MyCommands.ProcessDataCommand}" />

И добавьте CommandBinding к элементу управления, который вы хотите обработать своей командой: http://msdn.microsoft.com/en-us/library/system.windows.input.commandbinding.aspx

<Window x:Class="WCSamples.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="CloseCommand"
    Name="RootWindow"
    >
  <Window.CommandBindings>
    <CommandBinding Command="{x:Static NameSpace:MyCommands.ProcessDataCommand}"
                    Executed="CloseCommandHandler"
                    CanExecute="CanExecuteHandler"
                    />
  </Window.CommandBindings>
  <StackPanel Name="MainStackPanel">
    <Button Command="{x:Static NameSpace:MyCommands.ProcessDataCommand}" 
            Content="Close File" />
  </StackPanel>
</Window>

Теперь о волшебстве коротких клавиш;)

Там, где вы определили свою команду, добавьте следующий статический конструктор:

static MyCommands()
{
    ProcessDataCommand.InputGestures.Add(new KeyGesture(Key.Q, ModifierKeys.Alt));
}

И ваша команда тоже ответит на ярлык!

Загрузите пример перенаправленной команды здесь: http://www.codeplex.com/wpfroutedcommand

Надеюсь, это поможет

...