当用户按下ctrl + Tab时,我正在尝试执行一种方法。如果有多个窗口(App.Current.Windows> 1),则CanExecute应该为true,否则为false。
到目前为止,我阅读的所有文章都建议我需要为ICommand和ViewModel编写一个子类,这基本上是UI和tge自定义命令之间的“链接”。我看过一些例子
of how to create bindings
因为我没有得到,所以我试图
learn more about MVVM
但我恐怕还是一无所知。
答案 0 :(得分:1)
我感到您是WPF和MVVM的新手,尽管建议这样做,但您不必将MVVM与WPF一起使用。您可以通过事件处理程序执行相同的操作。
您可能想尝试以下方法:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
KeyUp += MainWindow_KeyUp;
}
private void MainWindow_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)))
{
MessageBox.Show(App.Current.Windows.Count.ToString());
}
}
}
答案 1 :(得分:1)
这是您可以怎么做
在Xaml中:
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<RoutedUICommand x:Key="ExecuteCommand" Text="ExecuteCommand" />
</Window.Resources>
<Window.InputBindings>
<KeyBinding Key="Tab" Modifiers="Ctrl" Command="{StaticResource ExecuteCommand}" />
</Window.InputBindings>
<Window.CommandBindings>
<CommandBinding Command="{StaticResource ExecuteCommand}" CanExecute="ExecuteCommand_CanExecute" Executed="ExecuteCommand_Executed" />
</Window.CommandBindings>
<Grid>
</Grid>
</Window>
在后面的代码中:
private void ExecuteCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = App.Current.Windows.Count > 1;
}
private void ExecuteCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show("Hello");
}
希望有帮助。