2013-07-22 28 views
1

我有一絲搜索文本框如何使搜索提示文本框的背景相同的文本框背景

 <TextBox 
       TextChanged="textboxsearch_TextChanged" 
       Grid.Column="4" Margin="0,0,10,10" Height="22" > 
       <TextBox.Style> 
        <Style TargetType="TextBox"> 
         <Style.Triggers> 
          <Trigger Property="Text" Value=""> 
           <Setter Property="Background" Value="{StaticResource SearchHint}" /> 
          </Trigger> 
          <Trigger Property="IsKeyboardFocused" Value="True"> 
           <Setter Property="Background" Value="White" /> 
          </Trigger> 
         </Style.Triggers> 
         <Setter Property="VerticalAlignment" Value="Bottom"/> 
        </Style> 
       </TextBox.Style> 
      </TextBox> 

這裏是SearchHint風格

<VisualBrush x:Key="SearchHint" Stretch="None"> 
     <VisualBrush.Visual> 
      <TextBox FontStyle="Italic" Background="White" Foreground="Gray" Text="Enter search text…" /> 
     </VisualBrush.Visual> 
    </VisualBrush> 

搜索框回地面由searchhint風格充滿。我現在的問題是如何讓視覺刷的寬度填充文本框的大小。現在它只填充文本框的一部分。 Text =「輸入搜索文本...」有白色背景,但文本框的其餘部分是灰色的。我想要有灰色提示文字的白色背景。

回答

3

給在VisualBrush一個大的填充(右側)的文本框,並給予VisualBrush左對齊:

<VisualBrush x:Key="SearchHint" Stretch="None" AlignmentX="Left"> 
    <VisualBrush.Visual> 
     <TextBox FontStyle="Italic" Background="White" Foreground="Gray" Text="Enter search text…" 
      Padding="0,0,1000,0" /> 
    </VisualBrush.Visual> 
</VisualBrush> 
+0

感謝這有助於... – HXD

1

那麼什麼你想,你可以綁定控件的寬度在VisualBrush您的實際目標的ActualWidth

類似:

<VisualBrush x:Key="SearchHint" 
       Stretch="None"> 
    <VisualBrush.Visual> 
    <TextBox Background="White" 
       FontStyle="Italic" 
       Foreground="Gray" 
       Width="{Binding ElementName=tb, Path=ActualWidth}" 
       Height="{Binding ElementName=tb, Path=ActualHeight}" 
       Text="Enter search text…" /> 
    </VisualBrush.Visual> 
</VisualBrush> 

... 

<TextBox Grid.Column="4" 
      Height="22" 
     TextChanged="textboxsearch_TextChanged" 
      x:Name="tb" 
      Margin="0,0,10,10"> 
    <TextBox.Style> 
    <Style TargetType="TextBox"> 
     <Style.Triggers> 
     <Trigger Property="Text" 
        Value=""> 
      <Setter Property="Background" 
        Value="{StaticResource SearchHint}" /> 
     </Trigger> 
     <Trigger Property="IsKeyboardFocused" 
        Value="True"> 
      <Setter Property="Background" 
        Value="White" /> 
     </Trigger> 
     </Style.Triggers> 
     <Setter Property="VerticalAlignment" 
       Value="Bottom" /> 
    </Style> 
    </TextBox.Style> 
</TextBox> 

然而

什麼你'在功能上'試圖做的事通常被稱爲「水印」/「佔位符文本」,並且使用該方法比簡單地使用該方法要複雜得多VisualBrush將一個實際的控制轉變爲一個畫筆。只是我的觀點。

如果您想嘗試使用水印方法This Answer爲您提供了一個很好的示例。

+0

謝謝,我是用水印文本的做法,但一些如何我無法使用它的多個文本框......我會在單獨的帖子中發佈我的問題。 – HXD