如何将UserControl的KeyBinding传递给其父级?

时间:2012-06-15 15:39:30

标签: c# wpf xaml mvvm

我创建了一个小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方式(如果可能的话)让父母“听”用户按键。

提前谢谢你;)

1 个答案:

答案 0 :(得分:3)

确定和取消按钮使用Enter和Escape是Windows长期标准化的东西,因此有一个内置的解决方案。您不需要为命令单独的键绑定,因为您可以将按钮设置为尊重这些键。

要在按Enter键时按下“按下”按钮,请在按钮的Xaml中设置IsDefault="True"。同样,设置IsCancel="True"将导致按下Escape时按下按钮。

无论控件的焦点如何,这两个键都可以在活动窗口的任何位置工作。值得注意的是,如果窗口中有多个“默认”或“取消”按钮,则行为可能无法预测。