2008-12-21 69 views
7

我想爲WPF搜索TextBox實現類似「Changing the Default Text in the Search Box」的內容。當文本框爲空時,該文本框應該顯示一些灰色的「Search ...」文本,然後當輸入文本時它應該正常工作。鏈接的文章顯示瞭如何在javascript中執行此操作。如何在WPF中開始這條路?到目前爲止,我所擁有的最好主意是在主文件夾頂部的另一個文本框,當搜索文本框獲得焦點或文本時,該文本框就不可見。如何爲WPF中的搜索框實現默認文本?

+0

我剛纔已經回答了另一個問題問同樣的事情:http://stackoverflow.com/a/10693516/862501 – mxgg250 2012-05-21 22:36:42

回答

0

你可以改變文本框有灰色的文字,只要其空和一個變量,它會告訴你,是空的,所以,當你點擊搜索就不會去搜索「搜索...」

或者你可以使用類似於你所說的東西,但不是上面的文本框,你可以在下面有文字。如果頂部有一個帶有透明背景的文本框,並且底部有一個標籤,當頂部文本框爲空時應該可以解決問題。

1

和WPF一樣,有很多方法可以實現你的目標。

也許最簡潔的方法是將子類TextBox並添加一個名爲HintText的新屬性。只要Text爲空(""),您的控件的模板將顯示HintText(可能以斜體和灰色顯示)。否則,它會像常規的TextBox一樣顯示Text

不涉及編寫自己的控件的替代方法是重新模板TextBox並使用Tag屬性來存儲提示文本。

另一種替代方法是編寫一個UserControl,結合了,比方說一個TextBox,一個TextBlock相同Grid內部。 TextBlock將包含提示文本,並且只有在TextBoxText爲空時纔會顯示。這可能是最容易實現的,但也是最不靈活的。

17

此樣式將使用背景屬性和一個可視化刷子顯示文本。一旦控件獲得焦點,文本將被刪除。

<TextBox.Style> 
      <Style TargetType="TextBox"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value=""> 
         <Setter Property="Background"> 
          <Setter.Value> 
           <VisualBrush Stretch="None"> 
            <VisualBrush.Visual> 
             <TextBlock Text="Enter value" Foreground="Gray"/> 
            </VisualBrush.Visual> 
           </VisualBrush> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Value="{x:Null}"> 
         <Setter Property="Background"> 
          <Setter.Value> 
           <VisualBrush Stretch="None"> 
            <VisualBrush.Visual> 
             <TextBlock Text="Enter value" Foreground="Gray"/> 
            </VisualBrush.Visual> 
           </VisualBrush> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsFocused}" Value="True"> 
         <Setter Property="Background"> 
          <Setter.Value> 
           <VisualBrush Stretch="None"> 
           </VisualBrush> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBox.Style> 
+1

簡單,在我看來這應該被標記爲很好的答案。 – 2013-04-26 15:27:46