7

WPF で次のようなラベルを作成すると:

<Label Content="_My Label"/>

次に、アプリを実行してAltキーを押すと、下線が引かれた「M」が表示されます。

Ctrlと同様に使用できる独自のカスタムホットキー添付プロパティがありますAlt

問題は、アンダースコアのみAltが表示されることです。

Ctrlキーが押されたときにアンダースコアを表示する方法はありますか?

注:が押されたAltときにバックグラウンドでプログラムによる KeyPressを送信したくありません。Ctrlそれは私のショートカットシステムを混乱させるだけです。

4

1 に答える 1

1

Ok!_ホットキーをAlt押さずに押しても表示する解決策がありますCtrl

方法は次のとおりです。


キーボードのキーを動的に押すための小さなコード:

//<summary>
//Function to Perform a Keyboard KeyPress.
//</summary>
void PressKey(Key KeyboardKey)
{
    KeyEventArgs args = new KeyEventArgs(Keyboard.PrimaryDevice,
    Keyboard.PrimaryDevice.ActiveSource, 0, Key.LeftAlt);
    args.RoutedEvent = Keyboard.KeyDownEvent;
    InputManager.Current.ProcessInput(args);
}

追加および削除するコードHotKeyChar:

//<summary>
//Function to Append a HotKeyChar to a Content of a Control.
//</summary>
void AppendHotKeyChar(ContentControl Ctrl, int KeyIndex)
{
    if (Ctrl.Content.ToString().Substring(KeyIndex, 1) != "_")
    {
        Ctrl.Content = "_" + Ctrl.Content;
    }
}
//<summary>
//Function to Remove a HotKeyChar to a Content of a Control.
//</summary>
void RemoveHotKeyChar(ContentControl Ctrl, int KeyIndex)
{
    if (Ctrl.Content.ToString().Substring(KeyIndex, 1) == "_")
    {
        Ctrl.Content = Ctrl.Content.ToString().Remove(KeyIndex, 1);
    }
}

の XAML コードButton Bt1:

<Button x:Name="Bt1" Content="Button" HorizontalAlignment="Left" Margin="169,97,0,0" VerticalAlignment="Top" Width="75"/>

(eg )Window.Loadedのイベントのコード:MainWindowMainWindow1_Loaded

PressKey(Key.LeftAlt);

(eg )Window.KeyDownのイベントのコード:MainWindowMainWindow1_KeyDown

if (e.Key == Key.LeftCtrl)
{
    AppendHotKey(Bt1, 0);
}

(eg )Window.KeyUpのイベントのコード:MainWindowMainWindow1_KeyUp

if (e.Key == Key.LeftCtrl)
{
    RemoveHotKey(Bt1, 0);
}

これで、アプリを起動すると、Alt動的に 1 回押されます。

Ctrlそして、を押すたびにControl.Contentが追加され、_HotKey下線付きで表示されます! ただし、1 つの注意点は、追加する場所を作成せずに作成する必要があるということですControl.ContentHotKeyChar '_'Index_

ただしAlt、アプリで をもう一度押すと、コードが機能しなくなることに注意してください。したがって、Altコードを機能させるには、もう一度押す必要があります。

を追加および削除する最良の方法HotKeyChar:

  • のとList<KeyValuePair<int, Control>>を格納するIndexのインスタンスを作成します。HotKeyCharControl
  • そして今、KeyDownイベントで ..appending の をループするKeyValuePair<...>だけList<...>です_
  • KeyUpイベントでは、..removing 内の をループするKeyValuePair<...>だけList<...>です_

お役に立てば幸いです。

于 2012-05-22T08:59:36.443 に答える