使用control键控制我的按钮的可见性
本文关键字:按钮 可见性 我的 控制 control 使用 | 更新日期: 2023-09-27 18:24:41
我想控制c#WPF应用程序窗口中按钮的可见性。
.只有当用户单击"alt+a+b"时,按钮才应可见。如果用户单击"alt+a+c",按钮应不可见。我该怎么做,知道吗?
就我个人而言,我会在实现INotifyPropertyChanged
接口的视图模型中创建一个名为IsButtonVisible
的布尔属性。
然后,我会添加某种处理程序方法来处理按键(KeyDown
事件):
if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) // Is Alt key pressed
{
IsButtonVisible = Keyboard.IsKeyDown(Key.A) && Keyboard.IsKeyDown(Key.B);
}
现在IsButtonVisible
属性将在正确按键后更新,我们只需要使用此值来影响Button
的Visibility
属性。为此,我们需要实现一个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;
}
}
现在,我们只需要从XAML Button
声明绑定到我们的布尔属性:
<Button Visibility="{Binding IsButtonVisible,
Converter={StaticResource BoolToVisibilityConverter},
FallbackValue=Collapsed, Mode=OneWay}">
KeyDown或KeyPress事件?
- 将按钮的可视性绑定到ViewModel
- 创建绑定到应用程序最顶层的命令(MainWindow)
- 为命令指定所需的热键
- 在执行命令的过程中,更改您在步骤#1中使用的属性值
- 对另一个命令执行相同操作(一个用于可见,另一个用于不可见)
订阅WPF
窗口的KeyDown
事件。然后这样做:
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
}
}