0

次の機能を作成するにはどうすればよいですか:

テキストボックスがフォーカスされておらず、ユーザーがそこにテキストを入力していない場合、テキストボックスにはEnter Name Here...のようなデフォルト値が必要です。ユーザーがそのテキストボックスをクリックすると、このラベルは消えます。

どんな助けにも感謝します。

これは私がこれまでに持っているものです。しかし、これはコントロール テンプレートです。この質問ではあまり役に立たないと思いますが、とにかく。

  <ControlTemplate x:Key="TextBoxBaseControlTemplate" TargetType="{x:Type TextBoxBase}">
        <Border Background="{TemplateBinding Background}" 
            x:Name="Bd" BorderBrush="LightGray"
            BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10">
            <Grid VerticalAlignment="Center">
                <ScrollViewer Margin="5 0 0 0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Disabled"  x:Name="PART_ContentHost"/>
            </Grid>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" TargetName="Bd"/>
                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
            </Trigger>
            <Trigger Property="Width" Value="Auto">
                <Setter Property="MinWidth" Value="100"/>
            </Trigger>
            <Trigger Property="Height" Value="Auto">
                <Setter Property="MinHeight" Value="20"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
4

1 に答える 1

2

見栄えの良い方法の 1 つは、デフォルトのテキストを透かしにすることです。これは UserControl にあると想定しているので、ここに私の実装があります

<UserControl.Resources>
    <SolidColorBrush x:Key="brushWatermarkBackground" Color="White" />
    <SolidColorBrush x:Key="brushWatermarkForeground" Color="LightSteelBlue" />
    <SolidColorBrush x:Key="brushWatermarkBorder" Color="Indigo" />

    <utilities:TextInputToVisibilityConverter x:Key="TextInputToVisibilityConverter" />
    <utilities:VisibilityToColorConverter x:Key="VisibilityToColorConverter" />
</UserControl.Resources>
<Grid>
        <TextBlock Name="MsgHeader1" HorizontalAlignment="Center" Margin="18,0,19,134" Width="308" Text="Enter Name Here..." Foreground="{StaticResource brushWatermarkForeground}" Height="46" VerticalAlignment="Bottom" Background="White">
            <TextBlock.Visibility>
                <MultiBinding Converter="{StaticResource TextInputToVisibilityConverter}">
                    <Binding ElementName="MsgHeader2" Path="Text.IsEmpty" />
                    <Binding ElementName="MsgHeader2" Path="IsFocused" />
                </MultiBinding>
            </TextBlock.Visibility>
        </TextBlock>
        <TextBox Name="MsgHeader2" TextWrapping="Wrap" Background="{Binding ElementName=MsgHeader1, Path=Visibility, Converter={StaticResource VisibilityToColorConverter}}" BorderBrush="{StaticResource brushWatermarkBorder}" Margin="18,0,19,134" Text="{Binding MessageHeader}" HorizontalAlignment="Center" Width="308" Height="46" VerticalAlignment="Bottom" />
</Grid>

明らかに、独自の ValueConverters を定義する必要があります (私のものは私自身のユーティリティ xmlns です) が、これらは簡単です。これにより、テキストを入力すると、テキストのデータバインディングも提供されます。

于 2012-12-18T17:43:09.347 に答える