2

我已经创建了一点OKCancelControl,我想在用户按下Enter或时绑定一个命令Escape

这是 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 和 Cancel 按钮是 Windows 长期以来标准化的东西,因此有一个内置的解决方案。您不需要为命令设置单独的键绑定,因为您可以将按钮设置为尊重这些键。

要使 WPF 在您按 Enter 时“按下”按钮,请IsDefault="True"在按钮的 Xaml 中进行设置。同样,设置IsCancel="True"将导致当您点击 Escape 时按下按钮。

然后,这两个键都应该在活动窗口中的任何位置起作用,而不管您的控件的焦点是什么。值得注意的是,如果您的窗口中有多个“默认”或“取消”按钮,则行为可能无法预测。

于 2012-08-03T08:32:59.050 回答