如何在后面的代码中使用已绑定的键?

时间:2016-01-06 13:52:58

标签: c# wpf xaml mvvm

我想使用Tab键来验证插入文本框的值。如果验证顺利,我还希望我的Tab键移动到下一个文本框。

所以我有我的XAML文件:

<StackPanel FocusManager.FocusedElement="{Binding ElementName=DVM_Positive_ReadOut}" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center" Height="400"  Width="602" >

            <StackPanel Orientation="Horizontal" Margin="5" Height="80">
                <Label HorizontalContentAlignment="Left" VerticalAlignment="Center" Padding="5" FontSize="25" Content="DVM Positive Readout" Width="290"/>
                <TextBox Style="{StaticResource CodeDigit}" x:Name="DVM_Positive_ReadOut"  Width="300" Height="50" IsReadOnly="{Binding Positive_ReadOnly}" Text="{Binding DVM_Pos, UpdateSourceTrigger=PropertyChanged}">
                    <TextBox.InputBindings>
                        <KeyBinding Key="Tab" Command="{Binding ValidateReadOnly}" CommandParameter="{Binding ElementName=DVM_Positive_ReadOut}"/>
                    </TextBox.InputBindings>
                </TextBox>
            </StackPanel>

            <StackPanel Orientation="Horizontal" Margin="5" Height="80">
                <Label HorizontalContentAlignment="Left" VerticalAlignment="Center" Padding="5" FontSize="25" Content="DVM Negative Readout" Width="290" />
                <TextBox Style="{StaticResource CodeDigit}" x:Name="DVM_Negavtive_ReadOut" Width="300" Height="50" IsReadOnly="{Binding Negative_ReadOnly}" Text="{Binding DVM_Neg, UpdateSourceTrigger=PropertyChanged}">
                    <TextBox.InputBindings>
                        <KeyBinding Key="Tab" Command="{Binding ValidateReadOnly}" CommandParameter="{Binding ElementName=DVM_Negavtive_ReadOut}"/>
                    </TextBox.InputBindings>
                </TextBox>
            </StackPanel>

            <StackPanel >
                <Button Content="Enter" FontSize="25" Width="300" Height="50" Margin="50">
                    <Button.InputBindings>
                        <KeyBinding Key="Return" Command="{Binding ValidateInsert}" CommandParameter="{Binding ElementName=EnterButton}"/>
                    </Button.InputBindings>
                </Button>
                <Label HorizontalContentAlignment="Center" VerticalAlignment="Center" Padding="5" FontSize="25" Content="{Binding TestGroupLabel}" Width="290" />
            </StackPanel>

        </StackPanel>

正如您在第7行所看到的,我将Tab键绑定到我的ViewModel中使用的ValidateReadOnly。 现在我也想用Tab键在文本框之间切换。所以我在我的代码后面写了文件:

 private void Window_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Space)
        {
            e.Handled = true;
            return;
        }

        if (e.Key == Key.Tab)
        {
            TraversalRequest tRequest = new TraversalRequest(FocusNavigationDirection.Next);
            UIElement keyboardFocus = Keyboard.FocusedElement as UIElement;

            if (keyboardFocus != null)
            {
                keyboardFocus.MoveFocus(tRequest);
            }

            e.Handled = true;
        }
    }

这里的问题是我不能将我的Tab键用于我的代码隐藏文件中的代码,因为我已经将Tab键绑定到我的ViewModel中的ValidateReadOnly。

是的,我可以使用验证码在我的ViewModel中编写代码隐藏文件中的焦点代码,但我发现很难在ViewModel中使用焦点。

0 个答案:

没有答案