如何在选择或点击UWP c#中的文本框后更改文本框前景的颜色?

时间:2016-08-25 14:17:44

标签: xaml c#-4.0 uwp uwp-xaml

如何在选择或点击UWP中的文本框后更改文本框前景的颜色?

我在文本框的gotfocus事件中使用了以下代码。

private void tbWeight_GotFocus(object sender, RoutedEventArgs e) 
{ 
  tbWeight.Foreground = new SolidColorBrush(Colors.blue); 
}

我第一次在文本框上写一些东西时工作正常 但是当文本框失去焦点,然后在同一文本框上再次点击或获取光标时,字体颜色将变为黑色。 我希望将黑色改为蓝色或任何其他颜色。

1 个答案:

答案 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>