如何在选择或点击UWP中的文本框后更改文本框前景的颜色?
我在文本框的gotfocus事件中使用了以下代码。
private void tbWeight_GotFocus(object sender, RoutedEventArgs e)
{
tbWeight.Foreground = new SolidColorBrush(Colors.blue);
}
我第一次在文本框上写一些东西时工作正常 但是当文本框失去焦点,然后在同一文本框上再次点击或获取光标时,字体颜色将变为黑色。 我希望将黑色改为蓝色或任何其他颜色。
答案 0 :(得分:0)
有什么不对的
当您将Foreground
属性设置为TextBox
时,此颜色仅在TextBox
失去焦点时应用,因此当您获得光标时,此颜色将不会更改。这就是您的代码第一次运行的原因。
然后在LostFocus
事件中将前景更改为原始颜色。它会在获得焦点时使前景发生变化,并在失去焦点时直接再次变化,但前景色仅在TextBox
失去焦点时应用,它会使您的代码看起来似乎无法正常工作。
执行此工作的正确方法是修改TextBox
的模板,您可以打开文档大纲然后找到您的TextBox
,右键单击它并选择< strong>修改模板,最后选择编辑副本,然后会在TextBox
中生成Page.Resources
的默认样式。在这种风格中,你可以找到VisualState x:Name="Focused"
,在这种视觉状态下,当它聚焦时它控制TextBox
的前景,你可以改变它,例如:
<VisualState x:Name="Focused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="PlaceholderTextContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextControlPlaceholderForegroundFocused}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="BorderElement">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextControlBackgroundFocused}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="BorderElement">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextControlBorderBrushFocused}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentElement">
<DiscreteObjectKeyFrame KeyTime="0" Value="Blue" /> <!--This one here!-->
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="RequestedTheme" Storyboard.TargetName="ContentElement">
<DiscreteObjectKeyFrame KeyTime="0" Value="Light" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>