11

我想创建一个文本框,如果它是

a) 空的

b) 失去焦点

当用户输入文本框时,灰色的“默认”文本应该会消失。

我尝试使用 来执行此操作ControlTemplate.Triggers,但我似乎找不到HasFocus属性。

使用 XAML 执行此操作的最佳方法是什么?

4

2 回答 2

23

虽然重新发明轮子并没有真正的好处,但看看如何做到这一点可能会很有趣。执行此操作的最简单方法(在纯 XAML 中)是为 a 创建一个ControlTemplate在它没有聚焦且不包含文本时TextBox覆盖 a 的方法:TextBlock

<ControlTemplate TargetType="TextBox">
<Grid>
    <TextBox Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}" />
    <TextBlock HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Text="Your Prompt Here"
                Margin="5,0,5,0"
                Foreground="#FF808080"
                FontStyle="Italic"
                IsHitTestVisible="False"
                x:Name="UserMessage"
                Visibility="Hidden"/>
</Grid>
<ControlTemplate.Triggers>
    <MultiTrigger>
        <MultiTrigger.Conditions>
            <Condition Property="Text" Value=""/>
            <Condition Property="IsKeyboardFocusWithin" Value="False"/>
            </MultiTrigger.Conditions>
        <Setter Property="Visibility" TargetName="UserMessage" Value="Visible"/>
    </MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>

意思是“如果属性为空并且 TextBox 没有键盘焦点,则将MultiTriggerVisibility 设置为 Visible ”Text

如果您想让它更可重用,那么您可以使用它作为默认模板创建一个自定义控件,并使用包含提示消息的依赖属性

于 2012-05-03T09:39:58.493 回答
14

您可以简单地使用Extended WPF ToolkitWatermarkTextBox在此处输入图像描述

我根据您对如何在项目中添加和使用库的评论编写了一个小指南。

步骤 1)在您的项目中右键单击References并选择Add Reference.

步骤1

步骤 2)找到并添加 dll 文件WPFToolkit.Extended.dll

第2步

步骤 3)最后您需要添加XAML代码。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:extToolkit="http://schemas.xceed.com/wpf/xaml/toolkit"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <extToolkit:WatermarkTextBox Watermark="Enter First Name" />
    </Grid>
</Window>

这里的关键是将 .dll 添加reference到 dll 文件中。

xmlns:extToolkit="http://schemas.xceed.com/wpf/xaml/toolkit"

然后你可以XAML像这样简单地使用它。

<extToolkit:WatermarkTextBox Watermark="Enter First Name" />
于 2012-05-03T09:14:52.093 回答