Textbox caret不移动 WPF C#

问题描述 投票:0回答:1

我试图在点击文本框时,将文本框的小圆点移动到文本框的起点,但没有成功.我尝试了多种方法,但总是得到同样的结果,即小圆点的位置没有改变,我的代码中是否有什么东西可以阻止小圆点的移动,是否有某个事件需要我使用?

这是我的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));
            }
        }
    }

谢谢你的帮助🙏

编辑: 只有当我设置一个断点和步进代码时,该代码才会工作。

c# wpf textbox caret
1个回答
0
投票

设置 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;}。
© www.soinside.com 2019 - 2024. All rights reserved.