灰色の「デフォルト」テキストが表示されるTextBoxを作成したいのですが、
a)空
b)焦点を失った
ユーザーがテキストボックスに入ると、灰色の「デフォルト」テキストが消えます。
を使用してこれを実行しようとしましたが、プロパティControlTemplate.Triggers
が見つからないようです。HasFocus
XAMLを使用してこれを行うための最良の方法は何ですか?
車輪の再発明には本当のメリットはありませんが、これがどのように行われるかを見るのは興味深いかもしれません。これを行う最も簡単な方法(純粋なXAMLで)は、フォーカスされておらず、テキストが含まれていない場合にをオーバーレイするControlTemplate
forを作成することです。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>
「プロパティが空で、TextBoxにキーボードフォーカスがないMultiTrigger
場合は、VisibilityをVisibleに設定する」という意味です。Text
これをより再利用可能にしたい場合は、これをデフォルトのテンプレートとして使用し、プロンプトメッセージを含む依存関係プロパティを使用してカスタムコントロールを作成できます。
拡張WPFツールキットのWatermarkTextBoxを使用するだけで済みます。
プロジェクトでライブラリを追加して使用する方法についてのコメントに基づいて、小さなガイドを作成しました。
ステップ1)References
プロジェクトを右クリックして、を選択しますAdd Reference
。
ステップ2) dllファイルを見つけて追加しますWPFToolkit.Extended.dll
。
ステップ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" />