我仍然在使用Commands和RoutedEvents的经验。没有使用RoutedCommands,我尝试实现一个简单的程序。我在哪里可以找到CommandTarget?
这里是我的命令类:
public class ColorChanger : ICommand
{
public static readonly RoutedEvent ChangeMyColor = EventManager.RegisterRoutedEvent("ChangeMyColor", RoutingStrategy.Direct, typeof(RoutedEventHandler), typeof(ColorChanger));
public void Execute(object parameter)
{
RoutedEventArgs eventArgs = new RoutedEventArgs(ChangeMyColor);
Keyboard.FocusedElement.RaiseEvent(eventArgs);
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public static void AddChangeMyColorHandler(DependencyObject o, RoutedEventHandler handler)
{
((UIElement)o).AddHandler(ColorChanger.ChangeMyColor, handler);
}
public static void RemoveChangeMyColorHandler(DependencyObject o, RoutedEventHandler handler)
{
((UIElement)o).AddHandler(ColorChanger.ChangeMyColor, handler);
}
}
为了确保我有这个命令的静态访问,我做了一个静态类持有的所有命令:
public static class AppCommands
{
private static ColorChanger colorChanger = new ColorChanger();
public static ColorChanger ColorChanger
{
get { return colorChanger; }
}
}
这就是你将在我的MainWindow.xaml中找到:
<StackPanel>
<Menu>
<MenuItem Command="{x:Static local:AppCommands.ColorChanger}" Header="ClickMe"
CommandTarget="{Binding ElementName=mainTextBox}" x:Name="menue1"/>
</Menu>
<TextBox Name="mainTextBox"/>
</StackPanel>
我想要的是通过单击menue1 -item“mainTextBox”更改的背景。 因此,让我们来看看我的MainWindow.cs内:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
AddHandler(ColorChanger.ChangeMyColor,new RoutedEventHandler(test));
}
public void test(object sender, RoutedEventArgs args)
{
Control someCtl = (Control) args.OriginalSource;
someCtl.Background = Brushes.BlueViolet;
}
}
的PROGRAMM工作 - 但不是正确的:)它总是改变主窗口的背景,但不是我的CommandTarget的。
所以 - 我做错了什么? 我忘了什么吗?
真的没人在这里谁可以帮忙? – CodeCannibal
虽然你的程序很简单,但很难遵循。尝试描述更好的理想行为。要有所帮助:您可以从这里开始查看[MSDN](http://msdn.microsoft.com/zh-cn/library/system.windows.input.icommandsource.commandtarget.aspx):“在Windows Presentation Foundation( WPF)的命令系统,ICommandSource上的CommandTarget属性只适用于ICommand是RoutedCommand的情况,如果CommandTarget设置在ICommandSource上,并且相应的命令不是RoutedCommand,则命令目标将被忽略。 – nemesv