首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MenuItem in Window,CommandBinding in UserControl

MenuItem in Window,CommandBinding in UserControl
EN

Stack Overflow用户
提问于 2014-06-07 16:27:13
回答 1查看 1.2K关注 0票数 0

我有一扇窗户:

代码语言:javascript
复制
<Window x:Class="SomeNamespace.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="350" Width="525">
<Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Copy"
        CanExecute="CommandCanExecute" Executed="CommandExecuted"/>
</Window.CommandBindings>
<DockPanel>
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="File">
            <MenuItem Command="ApplicationCommands.Copy"/>
        </MenuItem>
    </Menu>
</DockPanel>
</Window>

后面有一些代码:

代码语言:javascript
复制
void CommandCanExecute(object sender, CanExecuteRoutedEventArgs e) {
    e.CanExecute = true;
}

void CommandExecuted(object sender, EventArgs e) {
    MessageBox.Show("Done!");
}

一切都按我预期的方式运作。我可以使用MenuItem或Ctrl+C输入绑定来运行命令。

但现在我的课太大了,我决定重构。所以我把代码移到了用户控件中。这是我的新窗户:

代码语言:javascript
复制
<Window x:Class="SomeNamespace.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:SomeNamespace"
    Height="350" Width="525">
<DockPanel>
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="File">
            <MenuItem Command="ApplicationCommands.Copy"/>
        </MenuItem>
    </Menu>
    <my:UserControl1/>
</DockPanel>
</Window>

我的UserControl:

代码语言:javascript
复制
<UserControl x:Class="ImageDecompileSandbox.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <UserControl.CommandBindings>
        <CommandBinding Command="ApplicationCommands.Copy"
            CanExecute="CommandCanExecute" Executed="CommandExecuted"/>
    </UserControl.CommandBindings>
</UserControl>

基本上,一切都是一样的,除了CommandBinding从窗口移动到UserControl,这两个命令方法被向下推到用户控件。

问题:为什么上面的问题不起作用?为什么我的用户控件的命令没有被窗口接收?如何使窗口中的MenuItem / KeyBindings与用户控件中的命令执行一起工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-18 02:02:41

多亏了dkozl,我找到了一种方法来完成这个任务。

诀窍确实是将CommandBinding添加回窗口。没有在窗口中声明它们,因为窗口不知道用于执行和CanExecute的方法,所以我不能这样做,我只是将控件中的所有绑定添加到窗口中:

代码语言:javascript
复制
CommandBindings.AddRange(_userControl1.CommandBindings);

我发现这个一行黑客正是我所需要的,因为它允许我将命令控件和键绑定保持在窗口中,同时将命令实现移动到控件中。

谢谢你的帮助德科兹尔!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24099274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档