1

WPF 的新手......正在阅读这个WPF 路由命令,每个选项卡都有绑定,并且即将开始工作。

MenuItem 被禁用,直到我的 RuleTab (tabitem) 被选中,而不是弹出我的查找对话框,它在菜单上显示 System.Windows.Input.CommandBinding。我究竟做错了什么?

XAML:

<MenuItem Header="_Find..." IsEnabled="{Binding ElementName=RuleTab, Path=IsSelected}" >
                    <CommandBinding Command="Find" Executed="ExecuteFind" CanExecute="Find_CanExecute" ></CommandBinding>
                </MenuItem>

代码隐藏:

       private void ExecuteFind(object sender, ExecutedRoutedEventArgs e)
    {
        // Initiate FindDialog
        FindDialog dlg = new FindDialog(this.RuleText);

        // Configure the dialog box
        dlg.Owner = this;
        dlg.TextFound += new TextFoundEventHandler(dlg_TextFound);

        // Open the dialog box modally
        dlg.Show();
    }

    void dlg_TextFound(object sender, EventArgs e)
    {
        // Get the find dialog box that raised the event
        FindDialog dlg = (FindDialog)sender;

        // Get find results and select found text
        this.RuleText.Select(dlg.Index, dlg.Length);
        this.RuleText.Focus();
    }

    private void Find_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = RuleTab.IsSelected;
    }

任何建议将不胜感激!

弄清楚了!感谢那些回应。我所要做的就是将我的命令绑定移动到:

<Window.CommandBindings>
<CommandBinding Command="Find" Executed="ExecuteFind" CanExecute="Find_CanExecute" ></CommandBinding>
</Window.CommandBindings>

然后在我的 MenuItem 中引用 Command=Find。

4

1 回答 1

1

您会发现需要将 CommandBinding 添加到 TabItem(根据链接的示例)。然后绑定你的 MenuItem 你应该使用Command属性,可能连同一个CommandParameterand CommandTarget(指向我期望的 TabItem)。

例如,我在 ContextMenu 中有一个 MenuItem,我希望命令在 ContextMenu 的上下文(放置目标)上触发:

<MenuItem Header="View" 
          ToolTip="Open the Member Central view for this member"
          Command="{x:Static local:Commands.CustomerViewed}" 
          CommandParameter="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" 
          CommandTarget="{Binding Path=PlacementTarget, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}"
/>
于 2011-02-09T20:43:54.847 回答