您好 有没有办法选择XAML应该使用命令绑定事件处理程序的位置? 我在我的cusotm控件中添加了命令绑定的copule,但是对于execute和can_execute来说,这些函数不是直接在代码后面而是在另一个类中。这个类派生自Canvas,我在XAML中创建了这个类的实例。
<s:MyCanvas Focusable="true" Background="Transparent" x:Name="OwnCanvas" FocusVisualStyle="{x:Null}" ScrollViewer.CanContentScroll="True" >
我以这种方式添加命令绑定
<UserControl.CommandBindings>
<CommandBinding Command="{x:Static ApplicationCommands.Copy}" CanExecute="event handler from object OwnCanvas" />
</UserControl.CommandBindings>
有没有办法做到这一点?或者我必须将事件处理程序直接转移到codebehind ??
答案 0 :(得分:0)
我认为你必须在代码隐藏中转移处理程序,因为我不认为这是可能的。我可能是错的,如果可能的话,我很乐意纠正。
我通常只是在MyCanvas类中定义CommandBinding(后面的代码),然后在自定义控件中将MyCanvas作为CommandTarget引用。像这样:
public MyCanvas()
{
...
CommandBindings.Add(
new CommandBinding(ApplicationCommands.Copy,
(sender, e) => {
// Execute Stuff
},
(sender, e) => {
e.CanExecute = true;
e.Handled = true;
}));
...
}
在你的自定义控件中(假设它位于MyCanvas的可视树中)......
<Button Command="{x:Static ApplicationCommands.Copy}" CommandTarget="{Binding RelativeSource={RelativeSource AncestorType={x:Type s:MyCanvas}}}"/>
使用您的CommandTarget设置,将在其上调用Execute和CanExecute方法。