2008-12-21 68 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