2010-07-28 87 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屬性可以設置任何屬性。有趣的是,模板是一個屬性,可以在樣式中設置。但是,據我所知,您不能更改模板的各個部分。