03 мая 2012 г., 11:33 от Steve GreatrexArsen Zahray

Сделайте так, чтобы текст по умолчанию отображался в пустом текстовом поле без фокуса, используя XAML

Я хочу создать TextBox, который будет иметь серый & quot; default & quot; текст появляется в нем, если он

а) пустой

б) потерял фокус

когда пользователь вводит текстовое поле, серый «по умолчанию» текст должен исчезнуть.

Я пытался сделать это, используяControlTemplate.Triggersно я не могу найтиHasFocus имущество.

Каков наилучший способ сделать это с помощью XAML?

Ответы на вопрос (0)

03 мая 2012 г., 11:45 от Steve Greatrex

было бы интересно посмотреть, как это можно сделать. Самый простой способ сделать это (в чистом XAML) - создатьControlTemplate дляTextBox который перекрывает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>

MultiTrigger означает & quot; установить Visibility на Visible, еслиText свойство пустое И текстовое поле не имеет фокуса клавиатуры & quot;

Если вы хотите сделать это более пригодным для повторного использования, вы можете создать пользовательский элемент управления с этим шаблоном по умолчанию и со свойством зависимости, содержащим сообщение с подсказкой.

03 мая 2012 г., 11:55 от eandersson

Вы можете просто использоватьРасширенный WPF Toolkit& APOS; sWatermarkTextBox. enter image description here

Я написал небольшое руководство на основе вашего комментария о том, как добавить и использовать библиотеку в своем проекте.

Step 1) Щелкните правой кнопкой мыши наReferences в своем проекте и выберитеAdd Reference.

Step 1

Step 2) Найдите и добавьте файл DLLWPFToolkit.Extended.dll.

Step 2

Step 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>

Ключевым моментом здесь является добавлениеreference в файл DLL.

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

Тогда вы можете просто использовать его вXAML как это.

<extToolkit:WatermarkTextBox Watermark="Enter First Name" />

ВАШ ОТВЕТ НА ВОПРОС