我试图在点击文本框时,将文本框的小圆点移动到文本框的起点,但没有成功.我尝试了多种方法,但总是得到同样的结果,即小圆点的位置没有改变,我的代码中是否有什么东西可以阻止小圆点的移动,是否有某个事件需要我使用?
这是我的XAML。
<TextBox Name="roomNameBox"
Text ="Room Name"
Margin="23,0,0,0"
GotFocus="TextBox_GotFocus"
LostFocus="TextBox_LostFocus"
TextChanged="TextBox_TextChanged">
这是我的代码
private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
if (sender is TextBox box)
{
box.CaretIndex = 0;
}
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (sender is TextBox box)
{
if (box.Opacity == 0.5)
{
box.Opacity = 1;
box.CaretBrush = Brushes.White;
}
}
}
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
if (sender is TextBox box)
{
if (box.Text == "")
{
if (box.Name == roomNameBox.Name)
{
box.Text = Constants.ROOM_NAME_HINT;
}
else if (box.Name == timePerQuestionBox.Name)
{
box.Text = Constants.TIME_PER_QUESTION_HINT;
}
else if (box.Name == maxPlayersBox.Name)
{
box.Text = Constants.MAX_PLAYERS_HINT;
}
box.Opacity = 0.5;
box.CaretBrush = new SolidColorBrush(Color.FromRgb(150, 169, 198));
}
}
}
谢谢你的帮助🙏
编辑: 只有当我设置一个断点和步进代码时,该代码才会工作。
设置 box.CaretIndex = 0;
键盘和鼠标的GotFocus事件中的CaretIndex属性。请参阅 CaretIndex 属性 此处. 将索引设置为0,就等于将插字放在文本字符串内容的第一个字符(索引0)之前。
在GotFocus之后,有一个事件被触发,就是将小括号放在最后。解决方法是实现这两个事件。
<TextBox
Keyboard.GotKeyboardFocus="TextBox_GotKeyboardFocus" Mouse.GotMouseCapture="TextBox_GotMouseCapture"
Text="test"></TextBox>
private void TextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e){ (sender as TextBox).CaretIndex = 0;}private void TextBox_GotMouseCapture(object sender, MouseEventArgs e){ (sender as TextBox).CaretIndex = 0;}。