WPF |VB .Net ||文本框占位符



我想在WPF的文本框中有一个占位符。 我尝试搜索 XAML 脚本来解决我的问题,但我发现 XAML 代码对于简单的占位符来说太长了,然后我最终得到了我自己的解决方案.. 事件处理程序会减慢应用程序的速度吗?

Dim myPlaceholder As String = "My Sample Placeholder"
Private Sub tbStarSign_GotFocus(sender As Object, e As RoutedEventArgs) Handles tbStarSign.GotFocus
    If tbStarSign.Text = myPlaceholder Then
        tbStarSign.Text = ""
    End If
End Sub
Private Sub tbStarSign_LostFocus(sender As Object, e As RoutedEventArgs) Handles tbStarSign.LostFocus
    If tbStarSign.Text = "" Then
        tbStarSign.Text = myPlaceholder
    End If
End Sub

.

仅 XAML 解决方案没有错。

<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}"
       x:Key="TextBoxWithWatermarkStyle">
    <Setter Property="Padding" Value="3"/>
    <Setter Property="Background" Value="White"/>
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TextBox">
                <Border BorderThickness="1"
                        CornerRadius="1"
                        Background="{TemplateBinding Background}">
                    <Grid>
                        <ScrollViewer Margin="{TemplateBinding Padding}"
                                  x:Name="PART_ContentHost"/>
                        <TextBlock IsHitTestVisible="False" 
                               Text="{TemplateBinding Tag}"
                               VerticalAlignment="Center" 
                               HorizontalAlignment="Left"
                               Opacity="0.25"
                               Foreground="{TemplateBinding Foreground}"
                               Margin="5,0,0,0">
                            <TextBlock.Style>
                                <Style TargetType="{x:Type TextBlock}">
                                    <Setter Property="Visibility" Value="Collapsed"/>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}" Value="">
                                            <Setter Property="Visibility" Value="Visible"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

用法:

<TextBox Style="{StaticResource TextBoxWithWatermarkStyle}" Tag="Hello world" ... />

相关内容

  • 没有找到相关文章

最新更新