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

9

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

а) пустой

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

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

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

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

Я согласен с @Fuji и предлагаюWatermarkTextBox, но для дальнейшего использованияHasFocus эквивалентIsKeyboardFocused msdn.microsoft.com/en-us/library/… Steve Greatrex

Ваш Ответ

2   ответа
17

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

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

@ Фудзи и хорошо понимать, как эти вещи на самом деле работают!
Я согласен, что чистый XAML хорош, если редко используется в простом приложении. Я ненавижу добавлять сторонние библиотеки в проекты, если они не используются часто.
@SteveGreatrex, как мне создать пользовательский элемент управления для другого текста, например, Text = & quot; Ваша подсказка здесь & quot; другое текстовое поле. Мне нужно, чтобы текст был "Вы подсказываете там" ,
12

Вы можете просто использоватьРасширенный 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" />
да, я сделал это Но я должен сослаться на него, чтобы получить текстовое поле водяного знака. В этой библиотеке есть несколько сборок. Какой из них я должен ссылаться? Arsen Zahray
ах. Я перепутал это с инструментарием wpf. Спасибо! Arsen Zahray
В zip-файле есть только один DLL-файлExtendedWPFToolkit_Binaries.zip, он должен содержать файл с именем dllWPFToolkit.Extended.dll что вы добавляете какReference вVisual Studio.
Это пользовательская библиотека, которую вы загружаете с сайта, на который я ссылался.wpftoolkit.codeplex.com/releases/view/84227
в какой сборке? Arsen Zahray

Похожие вопросы