我想在我的c#WPF应用程序的窗口中控制我的按钮的可见性。
。只有当用户点击“alt + a + b”时,该按钮才能保持不变。如果用户点击“alt + a + c”,则该按钮不可见。我怎么能这样做。任何想法?
答案 0 :(得分:2)
就个人而言,我会在我的视图模型中创建一个名为IsButtonVisible
的布尔属性,该属性实现INotifyPropertyChanged
接口。
然后我会添加一些处理程序方法来处理按键(KeyDown
事件):
if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) // Is Alt key pressed
{
IsButtonVisible = Keyboard.IsKeyDown(Key.A) && Keyboard.IsKeyDown(Key.B);
}
现在IsButtonVisible
属性将在正确按键时更新,我们只需要使用此值来影响Visibility
的{{1}}属性。为此,我们需要实现Button
以在布尔值和IValueConverter
值之间进行转换。
Visibility
现在,我们只需要从XAML [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;
}
}
声明绑定到我们的Boolean属性:
Button
答案 1 :(得分:1)
表单上的KeyDown或KeyPress事件?
答案 2 :(得分:0)
答案 3 :(得分:0)
订阅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
}
}