gpt4 book ai didi

wpf - 为什么这个 WPF RoutedCommand 绑定(bind)的 Context MenuItem 被禁用?

转载 作者:行者123 更新时间:2023-12-04 13:09:13 24 4
gpt4 key购买 nike

目前,我仍在摸索 WPF,无法弄清楚为什么禁用此上下文菜单项:

<Window x:Class="DisabledMenuItemProblem.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DisabledMenuItemProblem"
Title="Window1" Height="300" Width="300">
<TextBlock Text="fooooobaaaaaar">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Foo" Command="{x:Static local:MyCommands.FooBar}" />
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</Window>

using System.Windows;
using System.Windows.Input;

namespace DisabledMenuItemProblem
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
CommandBindings.Add(new CommandBinding(MyCommands.FooBar, FooExecuted, CanFooExecute));
}

public void FooExecuted(object sender, ExecutedRoutedEventArgs e)
{ MessageBox.Show("Foo!"); }

public void CanFooExecute(object sender, CanExecuteRoutedEventArgs e)
{ e.CanExecute = true; }
}

public static class MyCommands
{
public static RoutedCommand FooBar = new RoutedCommand();
}
}

我错过了什么?

让我感到困惑的是,如果我在窗口中抛出一个按钮并将其命令设置为 FooBar 它就可以工作,一旦它被执行,上下文菜单就会启用!

干杯,伙计们,
克里斯。

最佳答案

这是我使用的一般模式....

首先,将您的命令保存在自己的静态类中,这可以促进重用等......

public static class MyCommands
{
public static RoutedUICommand CmdFoo = new RoutedUICommand("CmdFoo",
"CmdFoo",
typeof(MyCommands));
}

其次,在control/window/etc中注册命令。你想使用它,通常在构造函数中
public MyControl
{
public MyControl()
{
CommandBindings.Add(
new CommandBinding( MyCommands.CmdFoo, // this is the command object
XCutFooCommand, // execute
CanXCuteFooCommand));// can execute?
}

第三,在控件/窗口/等中创建您的处理程序......
  public void CanExecuteRerollCommand(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true; // can this command be executed?
e.Handled = true; // has this event been handled?
}
public void ExecuteRerollCommand(object sender, ExecutedRoutedEventArgs e)
{
// do stuff
}
}

最后,您的 xaml 应该如下所示:
    <ContextMenu>
<ContextMenu.CommandBindings>
<CommandBinding Command="foo:MyCommands.CmdFoo"
CanExecute="CanExecuteRerollCommand"
Executed="ExecuteRerollCommand" />
</ContextMenu.CommandBindings>
<MenuItem Header="Reroll" Command="foo:MyCommands.CmdFoo"/>
</ContextMenu>

请注意,没有约束力。另外,请注意 <CommandBinding><ContextMenu> .
这是一个引用......
http://www.wiredprairie.us/journal/2007/04/commandtarget_menuitem_context.html

被禁用的命令位于 this site

关于wpf - 为什么这个 WPF RoutedCommand 绑定(bind)的 Context MenuItem 被禁用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/455551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com