从一个控件(文本框)切换到另一个控件会使禁用的文本框启用 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>
尝试将 Button
的 IsTabStop
属性 设置为 false
:
<Button x:Name="btnUnlockcmb4"
IsTabStop="False"
Grid.Column="5"
FontSize="15"
...
通过按回车键,我从一个控件移动到另一个控件,我所有的控件都位于网格中,这是一张图片:
这里有什么问题,万一我的某些控件被禁用,当我 "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>
尝试将 Button
的 IsTabStop
属性 设置为 false
:
<Button x:Name="btnUnlockcmb4"
IsTabStop="False"
Grid.Column="5"
FontSize="15"
...