0

コマンド付きのボタンを含むツールバー付きのウィンドウがあります。ツールバーをボタンを含むスタックパネルに置き換えたため、ボタンが機能しなくなりました。

私の理解では、この音は何の違いもありません。ボタンにはまだCommandプロパティが設定されており、カスタムコマンドクラスでは何も変更せず、CommandBindingも同じです。これらは、ボタンよりも深いグリッドとユーザーコントロールに実装されていますが、ボタンがツールバーコントロールにある限り、機能します。

CommandBindingをウィンドウに直接実装すると、機能します(ただし、それは私が望んでいることではありません)

コードは次のとおりです(要約):

<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

詳細: この質問への回答を参照してください: 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 に答える