2014-10-30 93 views
1

我想要使用Resources中的VisualState更改TextBoxForegroundSilverlight3。下面的代碼是我到目前爲止嘗試過的。但它沒有奏效。請指導我。在VisualState中更改焦點上的TextBox Foreground

<TextBox x:Name="EmailTextBox" Text="{Binding UserName, Mode=TwoWay}" 
    Grid.Row="0" Grid.Column="1" Style="{StaticResource TextBoxEmailStyle}"/> 

,這裏是引用StyleTextBox以上:

<Style x:Key="TextBoxEmailStyle" TargetType="TextBox"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="TextBox"> 
       <Grid x:Name="RootElement"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="FocusStates"> 
          <VisualStateGroup.Transitions> 
           <VisualTransition GeneratedDuration="0:0:0.3"/> 
          </VisualStateGroup.Transitions> 
          <VisualState x:Name="Focused"> 
           <Storyboard> 
            <ColorAnimation 
            Duration="0" To="#00000000" 
         Storyboard.TargetName="ContentElement" 
         Storyboard.TargetProperty="(ContentElement.Foreground). 
          (SolidColorBrush.Color)"/> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Border x:Name="Border" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         Background="{TemplateBinding Background}" 
         Opacity="1"> 
         <Grid> 
          <Border x:Name="ReadOnlyVisualElement" 
           Background="#5EC9C9C9" 
           Opacity="0"/> 
          <Border x:Name="MouseOverBorder" 
           BorderBrush="Transparent" 
           BorderThickness="1"> 
           <StackPanel Orientation="Horizontal"> 
            <Image 
             Width="40" 
             Source="/Images/sign_in_email.png" 
             Margin="5,5,5,5"/> 
            <ScrollViewer x:Name="ContentElement" 
             BorderThickness="0" 
             IsTabStop="False" 
             Padding="{TemplateBinding Padding}" 
             VerticalAlignment="Center" 
             Margin="4"/> 
           </StackPanel> 
          </Border> 
         </Grid> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

回答

1

Storyboard.TargetProperty是不正確的,你需要提供一個默認狀態「沒有重點的」無Foreground變化(或者你可以永遠不要回到「正常」)。

<VisualState x:Name="Unfocused"/> 
<VisualState x:Name="Focused"> 
    <Storyboard> 
     <ColorAnimation Duration="0" To="#00000000" 
      Storyboard.TargetName="ContentElement" 
      Storyboard.TargetProperty="(Control.Foreground).(SolidColorBrush.Color)"/> 
    </Storyboard> 
</VisualState> 

而且BTW:顏色#00000000將不可見,也許你想要將其更改爲#FF000000

,並確保前景默認情況下,實際上設置爲SolidColorBrush實例:

<ScrollViewer x:Name="ContentElement" Foreground="White" ... /> 

通常,當您想要更改控件的Template時,您將包括爲此控件定義的所有VisualStates。因此請嘗試添加這些狀態,可能VisualState更新方法因爲the other TextBox states未定義而退出。

<VisualStateManager.VisualStateGroups> 
    <VisualStateGroup x:Name="FocusStates"> 
     <VisualState x:Name="Focused">...</VisualState> 
     <VisualState x:Name="Unfocused"/> 
    </VisualStateGroup> 
    <VisualStateGroup x:Name="CommonStates"> 
     <VisualState x:Name="Normal"/> 
     <VisualState x:Name="MouseOver"/> 
     <VisualState x:Name="Disabled"/> 
     <VisualState x:Name="ReadOnly"/> 
    </VisualStateGroup> 
    <VisualStateGroup x:Name="ValidationStates"> 
     <VisualState x:Name="Valid"/> 
     <VisualState x:Name="InvalidFocused"/> 
     <VisualState x:Name="InvalidUnfocused"/> 
    </VisualStateGroup> 
</VisualStateManager.VisualStateGroups> 

編輯:好了,你說這是在SL4但不是在SL3工作?那麼,看看features added with SL4,看看你是否找到任何解釋爲什麼模板在SL3中無法正常工作,但是在SL4中如此。

+0

我做了你提到的改變,但沒有奏效! – 2014-10-31 06:31:25

+0

這個「不工作」如何呈現? 「聚焦」只是沒有顏色變化,或者你有什麼異常? – Martin 2014-10-31 07:40:59

+0

@ Mini-Con:嘗試添加缺少的'VisualStates',看看我的擴展答案。 – Martin 2014-10-31 07:57:51