2012-06-15 26 views
2

我创建了一个小OKCancelControl,我想绑定在用户按下EnterEscape如何将UserControl的KeyBinding传递给它的父项?

这里的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方式(如果可能)让父母“听”用户键按下。

预先感谢您;)

回答

2

确定,使用回车和逃逸的东西,Windows已经标准化了很长一段时间取消按钮,所以有此内置的解决方案。您不需要单独的命令键盘绑定,因为您可以将按钮设置为尊重这些键。

为了让WPF按钮被按下,当你按下回车键时,在按钮的Xaml中设置IsDefault="True"。同样,设置IsCancel="True"将在按Escape时按下按钮。

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

相关问题