我有一个简单的WPF应用程序,其顶部有一个菜单。我试图将快捷方式绑定到菜单项之一,但是我无法弄清楚。请注意,这是我的业余爱好,对此还很陌生。
MainWindow.xaml
<Window.InputBindings>
<KeyBinding Gesture="Ctrl+R" Command="{Binding RepositionWindowCommand}" />
</Window.InputBindings>
<MenuItem Header="_Options">
<MenuItem x:Name="Menu_RepositionWindow" Header="_Reposition Window" Command="{Binding RepositionWindowCommand}" InputGestureText="Ctrl+R" />
</MenuItem>
MainMenu.cs
namespace WPF_Practice
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new PracticeDataContext();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
RepositionWindow();
}
public void RepositionWindow()
{
Left = SystemParameters.PrimaryScreenWidth - Width;
Top = 0;
}
}
public class PracticeDataContext
{
public ICommand RepositionWindowCommand { get; } = new RepositionWindowCommand();
}
public class RepositionWindowCommand : ICommand
{
public void Execute(object parameter)
{
var RepositionWindowClass = new MainWindow();
RepositionWindowClass.RepositionWindow();
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged { add { } remove { } }
}
}
这里的目标是每当我单击菜单项或使用Ctrl + R的快捷键时,将主窗口移至右上角。如果解决了问题,我还尝试在ICommand中放置“顶部”,“左侧”和“宽度”,以防万一,如下所示。
public class RepositionWindowCommand : ICommand
{
public void Execute(object parameter)
{
Left = SystemParameters.PrimaryScreenWidth - Width;
Top = 0;
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged { add { } remove { } }
}
当ICommand中的Left,Top和Width不能识别时。它说:“该名称在当前上下文中不存在。”
我在这里想念什么?我如何实现这个目标?
答案 0 :(得分:2)
当然,您不需要在RepositionWindowClass
内创建RepositionWindowCommand
。要访问内部的Window
,应使用xaml绑定将其作为参数传递给命令。您还应该正确实现CanExecuteChanged
public class RepositionWindowCommand : ICommand
{
public void Execute(object parameter)
{
if (parameter is Window window)
{
window.Left = SystemParameters.PrimaryScreenWidth - window.Width;
window.Top = 0;
}
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
}
Xaml用法
<MenuItem x:Name="Menu_RepositionWindow" Header="_Reposition Window" Command="{Binding RepositionWindowCommand}" InputGestureText="Ctrl+R" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>