11

灰色の「デフォルト」テキストが表示されるTextBoxを作成したいのですが、

a)空

b)焦点を失った

ユーザーがテキストボックスに入ると、灰色の「デフォルト」テキストが消えます。

を使用してこれを実行しようとしましたが、プロパティControlTemplate.Triggersが見つからないようです。HasFocus

XAMLを使用してこれを行うための最良の方法は何ですか?

4

2 に答える 2

23

車輪の再発明には本当のメリットはありませんが、これがどのように行われるかを見るのは興味深いかもしれません。これを行う最も簡単な方法(純粋なXAMLで)は、フォーカスされておらず、テキストが含まれていない場合にをオーバーレイするControlTemplateforを作成することです。TextBoxTextBlock

<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にキーボードフォーカスがないMultiTrigger場合は、VisibilityをVisibleに設定する」という意味です。Text

これをより再利用可能にしたい場合は、これをデフォルトのテンプレートとして使用し、プロンプトメッセージを含む依存関係プロパティを使用してカスタムコントロールを作成できます。

于 2012-05-03T09:39:58.493 に答える
14

拡張WPFツールキットWatermarkTextBoxを使用するだけで済みます。 ここに画像の説明を入力してください

プロジェクトでライブラリを追加して使用する方法についてのコメントに基づいて、小さなガイドを作成しました。

ステップ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>

ここで重要なのはreference、dllファイルにを追加することです。

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

そうすれば、このように簡単に使用できますXAML

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