Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何筛选键盘数字键_Wpf_Mvvm_Keypress - Fatal编程技术网

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
  • 文本框
    文本中添加输入的数字
  • 列表视图中选择与
    文本框编号相同的项目。文本具有
  • 我的Xaml用于我尝试的内容

    <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();
                    }
                }
        }
    }