我有一个带有工具栏的窗口,其中包含一些带命令的按钮。 由于我用包含按钮的堆栈面替换了工具栏,因此按钮停止工作。
根据我的理解,这种情况没有任何区别。按钮仍然具有Command属性设置,我没有更改我的自定义命令类中的任何内容,并且CommandBinding也仍然相同。它们实现了比按钮更深的一些网格和用户控件,但只要按钮位于ToolBar控件中它们就可以工作!
如果我直接在他们工作的Window中实现CommandBindings(但这不是我想要的)
这是代码(删节):
<Window>
<Grid>
<StackPanel>
<Button Command="gui:GuiCommands.Hello">Hello</Button>
</StackPanel>
<Grid>
<TabControl>
<TabItem Header="MyTab">
<Grid>
<Grid.CommandBindings>
<CommandBinding Command="gui:GuiCommands.Hello" Executed="hello_Clicked"/> <!-- THIS WOULD NOT WORK -->
</Grid.CommandBindings>
<Grid>
</TabItem>
</TabControl>
</Grid>
</Grid>
<Window.CommandBindings>
<CommandBinding Command="gui:GuiCommands.Hello" Executed="hello_Clicked"/> <!-- THIS WOULD WORK -->
</Window.CommandBindings>
</Window>
我知道它不会编译但我必须简化它。只要我用我的应用程序将“StackPanel”替换为“ToolBar”,这就可以正常工作。怎么会这样?
答案 0 :(得分:2)
好吧,我想再次被我自己想出来了(为什么这总是在我发布问题后才发生?)
简短:我需要在FocusManager.IsFocusScope="true"
StackPanel
长:看看这个问题的答案:Do I have to use CommandTarget? I thought any focused element would receive the Command
答案 1 :(得分:0)
StackPanel只会将子元素排列成一条可以水平或垂直定向的行。
虽然Toolbar为一组命令或控件提供了容器。
如果将StackPanel元素放在ToolBar
中会发生什么<ToolBar>
<StackPanel>
<Button Command="gui:GuiCommands.Hello">Hello</Button>
</StackPanel>
</ToolBar>