Wpf 如何筛选键盘数字键
我希望聚焦一个特定的Wpf 如何筛选键盘数字键,wpf,mvvm,keypress,Wpf,Mvvm,Keypress,我希望聚焦一个特定的文本框,只在用户按下数字键(1、2、3等)时才接受按键,否则我不想聚焦该文本框 塞纳里奥: 我在视图中有列表视图(具有自定义视图)。在列表视图下方有一个文本框 假设ListView包含编号为1、2、3、33、373等的项目 现在,当我按下数字键时,比如说,键3,应该会发生以下操作: 关注特定的TextBox 在文本框文本中添加输入的数字 在列表视图中选择与文本框编号相同的项目。文本具有 我的Xaml用于我尝试的内容 <ListView Name="lv"
文本框
,只在用户按下数字键(1、2、3等)时才接受按键,否则我不想聚焦该文本框
塞纳里奥:
我在视图中有列表视图
(具有自定义视图)。在列表视图下方有一个文本框
假设ListView
包含编号为1、2、3、33、373等的项目
现在,当我按下数字键时,比如说,键3
,应该会发生以下操作:
TextBox
文本框
文本中添加输入的数字列表视图中选择与文本框编号相同的项目。文本具有
<ListView Name="lv"
Grid.Row="1"
ItemsSource="{Binding}"
View="{Binding Path=SelectedItem,
ElementName=viewComboBox}" DisplayMemberPath="Name" IsTextSearchEnabled="True" TextSearch.TextPath="{Binding Path=Person.Name}"/>
<TextBox Grid.Row="2" Text="{Binding Path=TextSearch.Text,ElementName=lv}"></TextBox>
文本框中没有显示任何内容,我不知道如何处理数字按键
我需要这个和它的困惑使用MVVM
这方面的任何帮助都将是巨大的。使用代码的一些指导会更好。。。谢谢…此逻辑特定于视图。如果你把它放在代码后面就可以了。MVVM不会阻止您在代码隐藏中编写特定于视图的代码
但是,如果您虔诚地遵循“无代码隐藏”的方法,那么您可以创建一个新的应用程序,并将所有代码放在其中。您的行为将附加到listbox,并将textbox引用作为属性。它将侦听listbox上的keydown事件,并将键添加到textbox的文本属性
在ViewModel中,您不应该真的有这样的逻辑如果您使用的是MVVM,那么附加行为就是一种方法
命名您按键的源元素,如ListView
<ListView x:Name="MyListView">
....
</ListView>
在NumericKeyPressBehavior.FocusTarget的dependency属性已更改的事件处理程序中,处理ListView上的按键操作,然后根据是否按下了数字键,对目标文本框进行对焦,并将按下的键字符附加到该文本框中
private static void OnFocusTargetChanged(
DependencyObject o,
DependencyPropertyChangedEventArgs e)
{
var textBox = o as TextBox;
var listView = e.NewValue as ListView;
if (textBox != null && listView != null)
{
listView.KeyUp +=
(o1, e1) =>
{
var keyChar = GetKeyCharFromKeyCode(e1.Key);
if ("0123456789".Contains(keyChar.ToString()))
{
textBox.Focus();
textBox.Text += keyChar.ToString();
}
}
}
}
GetKeyCharFromKeyCode
可在此处找到
这有帮助吗?谢谢你的回答,让我试试,我会给你回电话的
private static void OnFocusTargetChanged(
DependencyObject o,
DependencyPropertyChangedEventArgs e)
{
var textBox = o as TextBox;
var listView = e.NewValue as ListView;
if (textBox != null && listView != null)
{
listView.KeyUp +=
(o1, e1) =>
{
var keyChar = GetKeyCharFromKeyCode(e1.Key);
if ("0123456789".Contains(keyChar.ToString()))
{
textBox.Focus();
textBox.Text += keyChar.ToString();
}
}
}
}