在文本框失去焦点后更改文本颜色

本文关键字:文本 颜色 焦点 失去 | 更新日期: 2023-09-27 18:04:50

我想在项目添加到列表后将文本框的默认textcolor更改为原始默认颜色。

XAML

<TextBox Name="AddLocationTextBox" Text="{Binding Path=AddLocationName, UpdateSourceTrigger=PropertyChanged}" 
         LostFocus="AddLocationTextBox_LostFocus" GotFocus="AddLocationTextBox_GotFocus" HorizontalAlignment="Left" Height="23" Margin="10,37,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="285">                    
        <TextBox.InputBindings>
            <KeyBinding Key="Enter" Command="{Binding AddLocationCommand}" />
        </TextBox.InputBindings>
</TextBox>

View中的代码

public LocationManagerView()
{
    InitializeComponent();
    AddLocationTextBox.Foreground = Brushes.Gray;   
}
private void AddLocationTextBox_GotFocus(object sender, RoutedEventArgs e)
{
    AddLocationTextBox.Text = string.Empty;
    AddLocationTextBox.Foreground = Brushes.Black;
}
private void AddLocationTextBox_LostFocus(object sender, RoutedEventArgs e)           
{
    AddLocationTextBox.Foreground = Brushes.Gray;
}

视图模型

public RelayCommand AddLocationCommand { get; private set; }
private void AddLocation()
{
    if ( AddLocationName != null)
    {
        Locations.Add(new Location()
        {
            Name = AddLocationName,
        });
        AddLocationName = "Enter New Location";
        Keyboard.ClearFocus();
        ////change textcolor to gray////
    }
    else
    {
        return;
    }     
}

在AddLocationName再次设置为"输入新位置"之后,我想将textcolor更改回灰色。看起来Keyboard.ClearFocus()并没有在View中调用LostFocus方法。

你知道我是怎么做到的吗?

在文本框失去焦点后更改文本颜色

如果你只是想改变你的TextBox的前景为灰色,而不是试图强迫AddLocationTextBox失去焦点,你应该手动改变前景(即使用AddLocationTextBox.Foreground = Brushes.Gray而不是Keyboard.ClearFocus())。

如果你正在寻找一种方法来强制当前聚焦的元素失去焦点,那么你可以使用下面的代码代替Keyboard.ClearFocus():

UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;
elementWithFocus.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));