4

C# WPF アプリケーションのウィンドウでボタンの可視性を制御したいと考えています。

.ユーザーが「alt+a+b」をクリックした場合にのみボタンが表示され、ユーザーが「alt+a+c」をクリックした場合にボタンが非表示になります。どうすればこれを行うことができますか?

4

4 に答える 4

2

個人的には、インターフェイスIsButtonVisibleを実装するビュー モデルで名前が付けられた Boolean プロパティを作成しINotifyPropertyChangedます。

KeyDown次に、キーの押下 (イベント)を処理するためのハンドラー メソッドを追加します。

if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) // Is Alt key pressed
{
    IsButtonVisible = Keyboard.IsKeyDown(Key.A) && Keyboard.IsKeyDown(Key.B);
}

これでIsButtonVisible、正しいキーが押されたときにプロパティが更新されます。必要なのは、この値を使用して のVisibilityプロパティに影響を与えることだけですButton。これを行うにはIValueConverter、ブール値と値の間で変換するを実装する必要がありVisibilityます。

[ValueConversion(typeof(bool), typeof(Visibility))]
public class BoolToVisibilityConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || value.GetType() != typeof(bool)) return null;
        bool boolValue = (bool)value;
        return boolValue ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || value.GetType() != typeof(Visibility)) return null;
        return (Visibility)value == Visibility.Visible;
    }
}

Buttonここで、XAML宣言から Boolean プロパティにバインドする必要があります。

<Button Visibility="{Binding IsButtonVisible, 
    Converter={StaticResource BoolToVisibilityConverter}, 
    FallbackValue=Collapsed, Mode=OneWay}">
于 2013-07-23T10:58:27.013 に答える
1

Form の KeyDown または KeyPress イベント?

于 2013-07-23T10:38:18.540 に答える
0

WindowのKeyDownイベントをサブスクライブします。WPF次に、これを行います:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyboardDevice.IsKeyDown(Key.LeftAlt) && e.KeyboardDevice.IsKeyDown(Key.A) && e.KeyboardDevice.IsKeyDown(Key.B))
    {
        // Do your stuff here
    }
}
于 2013-07-23T14:04:20.513 に答える
0
  1. ボタンの可視性を ViewModel にバインドする
  2. アプリケーションの最上位レベル (MainWindow) にバインドされるコマンドを作成します。
  3. 必要なホットキーをコマンドに割り当てます
  4. コマンドの実行内で、手順 1 で使用したプロパティ値を変更します。
  5. 別のコマンドについても同じことを行います (1 つは可視用、もう 1 つは不可視用)。
于 2013-07-23T10:39:24.310 に答える