0

我有一个带有工具栏的窗口,其中包含一些带有命令的按钮。按钮停止工作,因为我用包含按钮的堆栈面板替换了工具栏。

据我了解,这应该没有任何区别。按钮仍然设置了 Command 属性,我没有更改自定义命令类中的任何内容,并且 CommandBinding 也仍然相同。它们实现了一些比按钮更深的网格和用户控件,但它们确实有效,只要按钮位于 ToolBar 控件中!

如果我直接在窗口中实现 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”,这就会起作用。怎么可能?

4

2 回答 2

2

好的,我想我自己又想通了(为什么这总是在我发布问题后立即发生?)

短:我需要FocusManager.IsFocusScope="true"设置StackPanel

Long:查看这个问题的答案:我必须使用 CommandTarget 吗?我认为任何集中的元素都会收到命令

于 2012-12-19T17:58:29.447 回答
0

StackPanel仅将子元素排列成可以水平或垂直定向的单行。

工具栏为一组命令或控件提供了一个容器。

那么如果你在 ToolBar 中放置一个 StackPanel 元素会发生什么

<ToolBar>
    <StackPanel>
        <Button Command="gui:GuiCommands.Hello">Hello</Button>
    </StackPanel>
</ToolBar>
于 2012-12-19T17:55:42.680 回答