2010-07-28 61 views
3

我想为文本框制作一个简单的样式。我想保留关于 标准文本框外观和感觉的所有内容,除了一个项目。文本框的样式Silverlight

OnFocus on希望能够更改文本框的边框颜色。

我写了下面的内容,它确实有效。然而,一切都重新调整,我不得不 宣布高度,非聚焦边界的外观和感觉也不同。我怎样才能创建模板来仅仅实现onfocus状态。

<Style x:Key="TextBoxStyle" TargetType="TextBox"> 

      <Setter Property="BorderBrush" Value="Gold" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="TextBox"> 
         <Grid Height="{TemplateBinding Height}" 

          > 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal" /> 
            <VisualState x:Name="MouseOver" /> 
            <VisualState x:Name="Pressed" /> 
            <VisualState x:Name="Disabled" /> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="FocusStates"> 
            <VisualState x:Name="Focused"> 
             <Storyboard> 
              <ColorAnimation Storyboard.TargetName="brd" 
                  Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" 
                  Duration="0" 
                  To="Red" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Unfocused"/> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <Border x:Name="brd" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Background="{TemplateBinding Background}" 
            CornerRadius="2"> 
           <ContentPresenter x:Name="contentPresenter" /> 
          </Border> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
+0

您是否尝试过BasedOn属性? – SirDemon 2010-07-28 14:08:20

回答

2

您需要复制原始文本框的整个模板,您可以找到here。然后进行所需的更改。的SirDemon提到什么

+1

这是唯一的方法?男人,这是很多工作,以覆盖一个国家.... booo !!!! – Gabe 2010-07-29 17:01:32

+0

@gmcalab:是的,我经常听到这种说法,而且我也有同样的感受,不过一般的“更好的东西”很难想象。大多数“更好的东西”都是专门针对个人开发者当前的需求。 – AnthonyWJones 2010-07-29 17:11:19

0

例...

这里是一个文本块样式:

<Style 
    x:Key="detailBlk" 
    TargetType="TextBlock"> 
    <Setter 
     Property="FontSize" 
     Value="10" /> 
    <Setter 
     Property="Foreground" 
     Value="Purple" /> 
</Style> 

比方说,我想用20的字号另一种风格,但前景色还是紫色:

<Style 
    x:Key="detailBlk20" 
    TargetType="TextBlock" 
    BasedOn="{StaticResource detailBlk}"> 
    <Setter 
     Property="FontSize" 
     Value="20" /> 
</Style> 

编辑:对不起,重读问题。你想改变模板。 setter属性可以设置任何属性。有趣的是,模板是一个属性,可以在样式中设置。但是,据我所知,您不能更改模板的各个部分。