#c# #wpf #dynamic #textbox #focus
#c# #wpf #динамическое #текстовое поле #фокус
Вопрос:
У меня есть System.Windows.Controls.TextBox
объект, который я хотел бы вести себя следующим образом: когда вы нажимаете на него, динамически определяется TextBox
, получает ли он фокус или нет. Вот игрушечное приложение, которое содержит неудачную попытку выполнить это:
<!-- MainWindow.xaml -->
<Window x:Class="Focus.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Label Name="myLabel" Grid.Row="0" Background="Red"></Label>
<TextBox Name="myTextbox" Grid.Row="1" Background="Green"></TextBox>
</Grid>
</Window>
// MainWindow.xaml.cs
using System;
using System.Windows;
using System.Windows.Input;
namespace Focus
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
myTextbox.PreviewGotKeyboardFocus = myTextbox_GotKeyboardFocus;
}
private static readonly Random myRandom = new Random();
private void myTextbox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
int randomInt = myRandom.Next(0, 2); // 0 or 1
myLabel.Content = randomInt;
if(randomInt==0)
{
// PREVENT FOCUS - INSERT CODE HERE. (The line below is a failed attempt.)
FocusManager.SetFocusedElement(this, myLabel);
}
}
}
}
Ответ №1:
Следующий код, похоже, делает свое дело:
// PREVENT FOCUS - INSERT CODE HERE.
myLabel.Focusable = true;
myLabel.Focus();
myLabel.Focusable = false;
Я также изменил эту строку кода:
myTextbox.PreviewGotKeyboardFocus = myTextbox_GotKeyboardFocus;
в это:
myTextbox.GotFocus = myTextbox_GotKeyboardFocus;
Ответ №2:
Я надеюсь, вы знаете, что вы подключились к фокусу клавиатуры (клавиша табуляции).
void textBox1_GotFocus(object sender, System.EventArgs e)
{
if (!this.checkBox1.Checked)
this.checkBox1.Focus();
else
this.textBox1.Focus();
}
Комментарии:
1. Событие GotKeyboardFocus также запускается при щелчке текстового поля.
2. Я попытался включить вашу идею в свой пример кода (вызвав myLabel . Focus()), и, к сожалению, это, похоже, не работает.