2012-08-27 52 views
0

我有我的文本框,簡約的風格:風格應該關閉的風格改變文本框時集中

<Style x:Key="PortalFocusVisualStyle" TargetType="TextBox"> 
    <!--<Setter Property="Focusable" Value="False"/>--> 
    <Setter Property="BorderBrush"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#7FFFFFFF" Offset="1"/> 
       <GradientStop Color="#3FFFFFFF"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#0CFFFFFF" Offset="0"/> 
       <GradientStop Color="#26FFFFFF" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
</Style> 

這是我所有的文本框應該是什麼樣子。順便說一句,如果可能的話,密碼框也可以,但我也可以用同樣的方式爲它們做一個新的樣式。

當用戶單擊文本框時,頂部邊界消失得近乎奇怪。 對於Windows 7,似乎這是默認行爲。 但我不想要這個,如果文字框(或密碼框)被關注或不關注,它應該看起來完全相同。

所以我的想法是使用這種風格的風格和focusvisualstyle這樣的:

我的問題仍是關注文本框看起來不一樣。

我試着用visualstates工作,並增加在二傳手模板,我上面的風格:

<Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="TextBox" > 
       <Grid x:Name="RootElement" Background="{TemplateBinding Background}" > 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="FocusStates"> 
          <VisualState x:Name="Focused"/> 
          <VisualState x:Name="Unfocused"/> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 

但這是錯誤不知怎麼的,我看到的只是一個空盒子。我不知道我需要添加到網格中,或者如果網格是一個好主意,我無法將VisualState添加到模板中,有人可以幫我解決嗎?

或者也許有一個更簡單的解決方案? 我希望我的文本框和密碼箱具有上述背景和上面的邊框樣式,當它聚焦時,它看起來應該是一樣的,而不是改變邊框等等......

非常感謝! 埃裏克

回答

0

這就是你需要做什麼:

<Style TargetType="{x:Type TextBox}"> 
     <Setter Property="Margin" Value="0" /> 
     <Setter Property="Padding" Value="0" /> 
     <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
     <Setter Property="BorderBrush"> 
      <Setter.Value> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="#7FFFFFFF" Offset="1"/> 
        <GradientStop Color="#3FFFFFFF"/> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="#0CFFFFFF" Offset="0"/> 
        <GradientStop Color="#26FFFFFF" Offset="1"/> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TextBox}"> 
        <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"> 
         <ScrollViewer Margin="0" x:Name="PART_ContentHost"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

的ScrollViewer中是文本框模板的實際內容的主機。這裏的祕訣是將FocusVisualStyle設置爲null。這將爲您提供跨所有平臺的一致外觀。

+0

非常感謝!但是現在文本框的邊界已經完全消失了。必須嘗試解決這個問題,也許它的工作,然後,這個想法看起來不錯.... – user1628064

+0

不要讓它工作。如果我使用上面的代碼,我根本沒有看到邊框。我試圖添加相同的邊框到scrollviewer本身,但我仍然沒有看到它。當我刪除模板時,我會看到我的邊框,但遇到同樣的問題,它在獲得焦點時會在頂部變暗。 – user1628064