从一个控件(文本框)切换到另一个控件会使禁用的文本框启用 WPF

Switching from one control (textbox) to another makes disabled text box to be enabled WPF

通过按回车键,我从一个控件移动到另一个控件,我所有的控件都位于网格中,这是一张图片:

这里有什么问题,万一我的某些控件被禁用,当我 "jump" 到该控件时,它正在启用,如果我的控件之一是按钮,它像点击鼠标一样被触发.

我不知道如何解决这个问题, 这就是它现在看起来正确的方式(我的代码)以及我如何尝试解决这个问题(当我跳上它时保持控制禁用)。

这是我的 xaml 3 个文本框和 3 个组合框

<TextBox Name="txt1"   Grid.Row="0"  Grid.Column="1"         Margin="0,0,10,0" FontSize="15"  VerticalContentAlignment="Center" />
<TextBox Name="txt2"   Grid.Row="1"  Grid.Column="1"         Margin="0,5,10,0" FontSize="15" VerticalContentAlignment="Center"/>
<TextBox Name="txt2"   Grid.Row="2"  TextWrapping="Wrap"     Grid.Column="1" Margin="0,5,10,0" FontSize="15"  />
<ComboBox Name="cmb1"  Grid.Row="3"  Grid.Column="1"         FontSize="15" Margin="0,5,10,0" />
<ComboBox Name="cmb2"  Grid.Row="4"  Grid.Column="1"         FontSize="15" Margin="0,5,10,0"  />
<ComboBox Name="cmb3"  Grid.Row="5"  Grid.Column="1"         FontSize="15" Margin="0,5,10,0" />

<Grid Grid.Row="6" Grid.Column="1" Margin="0,5,10,0">
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="85*"/>
    <ColumnDefinition Width="15*"/>
</Grid.ColumnDefinitions>
<ComboBox Name="cmb4" Grid.Column="0" IsEnabled="False" FontSize="15" >
    <ComboBox.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#E0E4E5" />
    </ComboBox.Resources>
</ComboBox>

<Button x:Name="btnUnlockcmb4"
                Grid.Column="5"
                FontSize="15"
                BorderThickness="1.5"
                HorizontalContentAlignment="Center"
                VerticalContentAlignment="Center"
                Margin="4,0,0,0"
                Foreground="White"
                Background="White"
                BorderBrush="#0091EA"  Click="btnUnlockcmb4_Click">
                    <Button.Template>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border BorderThickness="{TemplateBinding BorderThickness}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            Background="{TemplateBinding Background}">
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                            </Border>
                        </ControlTemplate>
                    </Button.Template>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                        <Image Source="/Icons/unclock.png" Margin="4" Grid.Column="0" Width="Auto"/>
                        </Grid>
                </Button>
            </Grid>

实际上我是 "jumping from one to another".

的控件

并且cmb4应该保持禁用状态,将其跳开但不要改变他的状态..

这是我的代码:

private void Grid_PreviewKeyDown_1(object sender, KeyEventArgs e)
    {
        try
        {
            if (e.Key == Key.Enter)
            {


                UIElement element = e.Source as UIElement;

                //check is enabled = false as it is, so keep it disabled
                if (element.IsEnabled == false)
                {
                    element.IsEnabled = false;
                }
                else
                {
                    element.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

注意按钮 btnUnlockcm4,通常在我的 cmb4 上将 IsEnabled 属性 设置为 True,所以按 enter 键被触发我想这就是它启用我的 cmb4 的原因?

编辑:

包含控件的网格:

<Grid Grid.Row="1" Grid.Column="0" Margin="0,3" PreviewKeyDown="Grid_PreviewKeyDown_1">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="25*"/>
                    <ColumnDefinition Width="75*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="45" />
                    <RowDefinition Height="45"/>
                    <RowDefinition Height="70"/>
                    <RowDefinition Height="45"/>
                    <RowDefinition Height="45"/>
                    <RowDefinition Height="45"/>
                    <RowDefinition Height="45"/>
                    <RowDefinition Height="45"/>
                    <RowDefinition Height="45"/>
                    <RowDefinition Height="45"/>
                    <RowDefinition Height="45" />
                    <RowDefinition Height="45"/>
                    <RowDefinition MinHeight="150"/>
                    <RowDefinition Height="45" />
                </Grid.RowDefinitions>

尝试将 ButtonIsTabStop 属性 设置为 false:

<Button x:Name="btnUnlockcmb4"
         IsTabStop="False"
         Grid.Column="5"
         FontSize="15"
         ...