C# WPF アプリケーションのウィンドウでボタンの可視性を制御したいと考えています。
.ユーザーが「alt+a+b」をクリックした場合にのみボタンが表示され、ユーザーが「alt+a+c」をクリックした場合にボタンが非表示になります。どうすればこれを行うことができますか?
C# WPF アプリケーションのウィンドウでボタンの可視性を制御したいと考えています。
.ユーザーが「alt+a+b」をクリックした場合にのみボタンが表示され、ユーザーが「alt+a+c」をクリックした場合にボタンが非表示になります。どうすればこれを行うことができますか?
個人的には、インターフェイス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}">
Form の KeyDown または KeyPress イベント?
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
}
}