在文本框失去焦点后更改文本颜色
本文关键字:文本 颜色 焦点 失去 | 更新日期: 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));