2

少し作成しましたが、ユーザーがまたはOKCancelControlを押したときにコマンドをバインドしたいと思いますEnterEscape

ここにXAMLがあります

<UserControl.InputBindings>
    <KeyBinding Key="Enter"
                Command="{Binding ElementName=this, Path=OkCommand, UpdateSourceTrigger=PropertyChanged}"/>

    <KeyBinding Key="Escape"
                Command="iw:InnerWindow.CancelCommand"/>
</UserControl.InputBindings>

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Border Grid.Column="0"
            Style="{StaticResource BorderStyle}">
        <Button Content="{Binding ElementName=this, Path=ButtonName, UpdateSourceTrigger=PropertyChanged}"
                Command="{Binding ElementName=this, Path=OkCommand, UpdateSourceTrigger=PropertyChanged}"/>
    </Border>

    <Border Grid.Column="1"
            Style="{StaticResource BorderStyle}">
        <Button Content="{Binding Source={x:Static Member=t:BaseText.Cancel}}"
                Command="iw:InnerWindow.CancelCommand" />
    </Border>
</Grid>

しかし、私の場合は良くないフォーカスがあるKeyBinding場合にのみ処理されます。UserControl

親がユーザーのキーの押下を「リッスン」できるようにするための MVVM または XAML の方法 (可能であれば) を見つけたいと思います。

前もって感謝します ;)

4

1 に答える 1

3

EnterキーとEscapeキーを使用した[OK]ボタンと[キャンセル]ボタンは、Windowsで長い間標準化されてきたものであるため、このためのソリューションが組み込まれています。これらのキーを尊重するようにボタンを設定できるため、コマンドに個別のキーバインディングは必要ありません。

Enterキーを押したときにWPFボタンを「押す」にIsDefault="True"は、ボタンのXamlを設定します。同様に、設定IsCancel="True"すると、エスケープを押したときにボタンが押されます。

これらのキーは両方とも、コントロールのフォーカスに関係なく、アクティブなウィンドウのどこからでも機能するはずです。ウィンドウに複数の[デフォルト]または[キャンセル]ボタンがある場合、動作が予測できない可能性があることに注意してください。

于 2012-08-03T08:32:59.050 に答える