我有一个datatemplate xaml,目前在报告屏幕中看起来像这样
<CheckBox>
<StackPanel>
<TextBlock Text="{Binding Path=DisplayName}" FontWeight="Bold" Margin="0 0 0 5" />
<RadioButton Content="All Pages" IsChecked="{Binding Path=AllPages}" Margin="0 0 0 5" />
<RadioButton>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Pages: " Margin="0 3 5 0" />
<TextBox Width="130" Text="{Binding Path=SelectedValue}" />
</StackPanel>
</RadioButton>
</StackPanel>
</CheckBox>
我想知道,我如何禁用使用' - '和'='作为chek并取消选中的默认复选框行为。
我想允许该文本框中的用户为页面范围键入“1-5,6,7”,但不能这样做,因为' - '正在检查并取消选中该框
编辑:我想维护空格键功能,选中+取消选中复选框。无论出于何种原因,如果我在文本框中并输入空格,则不会触发切换事件,但是' - '和'='会触发。
EDIT2:理想情况下寻找xaml修复程序,因为我正在尝试维护MVVM架构,并且不想让代码落后
答案 0 :(得分:3)
CheckBox.OnKeyDown是罪魁祸首(见http://msdn.microsoft.com/en-us/library/system.windows.controls.checkbox.onkeydown.aspx)。我通过创建一个覆盖OnKeyDown并且什么都不做的自定义CheckBox类来解决这个问题。 VB解决方案看起来像:
Public Class IgnoreKeyboardCheckBox
Inherits CheckBox
Protected Overrides Sub OnKeyDown(e As System.Windows.Input.KeyEventArgs)
If e.Key = Key.Space Then
MyBase.OnKeyDown(e)
End If
End Sub
End Class
只要您需要使用复选框忽略键盘输入,就可以使用此类而不是CheckBox。
答案 1 :(得分:1)
从CheckBox.cs source code in C# .NET可以看出,对于双态复选框,Key.Add, Key.Subtract, Key.OemPlus, Key.OemMinus
有自定义行为。
(以编程方式)添加命令对我不起作用。覆盖子类的确是:
protected override void OnKeyDown(KeyEventArgs e)
{
// Non ThreeState Checkboxes natively handle certain keys.
if (SuppressNativeKeyDownBehaviour(e.Key))
return;
base.OnKeyDown(e);
}
private bool SuppressNativeKeyDownBehaviour(Key key)
{
switch (key)
{
case Key.Add:
case Key.Subtract:
case Key.OemPlus:
case Key.OemMinus:
return true;
default:
return false;
}
}
答案 2 :(得分:0)
尝试使用空命令覆盖键盘快捷键:
<RadioButton>
<KeyBinding Key="OemMinus" Command="{Binding EmptyCommand}"/>
</RadioButton>
在你的viewmodel中:
//使用System.windows.input
public Icommand EmptyCommand = ApplicationCommands.NotACommand;