WPF中的TextBox一些问题

Posted 猫得蟹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF中的TextBox一些问题相关的知识,希望对你有一定的参考价值。

1、如何判断TextBox是否为空?

if(textbox.Text != string.empty)


//或者

if(textbox.Text.Trim()!="")
{

}

2、设置TextBox为空时,背景文字提示

参考博客:http://www.cnblogs.com/tsunami/archive/2011/09/16/2179170.html

<TextBox FontSize="17" Height="26" Margin="230,150,189,0" Name="txt_Account" VerticalAlignment="Top" Foreground="Indigo" TabIndex="0" BorderThickness="1">
            <TextBox.Resources>
                <VisualBrush x:Key="HelpBrush" TileMode="None" Opacity="0.3" Stretch="None" AlignmentX="Left">
                    <VisualBrush.Visual>
                        <TextBlock FontStyle="Italic" Text="请输入用户名"/>
                    </VisualBrush.Visual>
                </VisualBrush>
            </TextBox.Resources>
            <TextBox.Style>
                <Style TargetType="TextBox">
                    <Style.Triggers>
                        <Trigger Property="Text" Value="{x:Null}">
                            <Setter Property="Background" Value="{StaticResource HelpBrush}"/>
                        </Trigger>
                        <Trigger Property="Text" Value="">
                            <Setter Property="Background" Value="{StaticResource HelpBrush}"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>

在Stackoverflow上的回答也很好http://stackoverflow.com/questions/833943/watermark-hint-text-placeholder-textbox-in-wpf/21672408#21672408

以下这个回答使用资源实现

<Window.Resources>

    <Style x:Key="TextBoxUserStyle" BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
      <Setter Property="Foreground" Value="Black"/>
      <Setter Property="HorizontalAlignment" Value="Center"/>
      <Setter Property="VerticalContentAlignment" Value="Center"/>
      <Setter Property="Width" Value="225"/>
      <Setter Property="Height" Value="25"/>
      <Setter Property="FontSize" Value="12"/>
      <Setter Property="Padding" Value="1"/>
      <Setter Property="Margin" Value="5"/>
      <Setter Property="AllowDrop" Value="true"/>
      <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type TextBox}">
            <Border x:Name="OuterBorder" BorderBrush="#5AFFFFFF" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4">
              <Border x:Name="InnerBorder" Background="#FFFFFFFF" BorderBrush="#33000000" BorderThickness="1,1,1,1" CornerRadius="3,3,3,3">
                <ScrollViewer SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" x:Name="PART_ContentHost"/>
              </Border>
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>

    <Style x:Key="PasswordBoxVistaStyle" BasedOn="{x:Null}" TargetType="{x:Type PasswordBox}">
      <Setter Property="Foreground" Value="Black"/>
      <Setter Property="HorizontalAlignment" Value="Center"/>
      <Setter Property="VerticalContentAlignment" Value="Center"/>
      <Setter Property="Width" Value="225"/>
      <Setter Property="Height" Value="25"/>
      <Setter Property="FontSize" Value="12"/>
      <Setter Property="Padding" Value="1"/>
      <Setter Property="Margin" Value="5"/>
      <Setter Property="AllowDrop" Value="true"/>
      <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type PasswordBox}">
            <Border x:Name="OuterBorder" BorderBrush="#5AFFFFFF" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4">
              <Border x:Name="InnerBorder" Background="#FFFFFFFF" BorderBrush="#33000000" BorderThickness="1,1,1,1" CornerRadius="3,3,3,3">
                <Grid>
                  <Label x:Name="lblPwd" Content="Password" FontSize="11" VerticalAlignment="Center" Margin="2,0,0,0" FontFamily="Verdana" Foreground="#828385" Padding="0"/>
                  <ScrollViewer SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" x:Name="PART_ContentHost"/>
                </Grid>
              </Border>
            </Border>
            <ControlTemplate.Triggers>
              <Trigger Property="IsFocused" Value="True">
                <Setter Property="Visibility" TargetName="lblPwd" Value="Hidden"/>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Window.Resources>


        <PasswordBox Style="{StaticResource PasswordBoxVistaStyle}" Margin="169,143,22,0" Name="txtPassword" FontSize="14" TabIndex="2" Height="31" VerticalAlignment="Top" />

使用第一种方式实现PasswordBox的话需要设置依赖属性,因为PasswordBox中的Password不是依赖属性,需要自己实现。留作以后研究

 

3、自己写UserControl实现PasswordBox和TextBox的水印

参考博客:http://www.cnblogs.com/zhanglee/archive/2012/10/20/2732097.html

贴出PasswordBox的代码,侵删

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Class="WpfApplication1.MyPassword"
    x:Name="UserControl"
    d:DesignWidth="150" d:DesignHeight="26">

    <Grid x:Name="LayoutRoot">
        <Border Background="White" Padding="2,3" Margin="1" d:LayoutOverrides="VerticalAlignment, GridBox"/>
        <TextBlock Text="请输入密码" x:Name="txtPasswordTip" Padding="7,3" Margin="1,3,1,1" FontFamily="SimSun" d:LayoutOverrides="VerticalAlignment, GridBox"/>
        <PasswordBox Padding="4,3,2,3"    Background="Transparent" x:Name="password" PasswordChanged="password_PasswordChanged" d:LayoutOverrides="GridBox" Password=""/>
    </Grid>
</UserControl>
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
    /// <summary>
    /// MyPassword.xaml 的交互逻辑
    /// </summary>
    public partial class MyPassword : UserControl
    {
        public MyPassword()
        {
            this.InitializeComponent();
            if (string.IsNullOrWhiteSpace(TipContent))
            {
                _tipContent = "请输入密码";
            }
            txtPasswordTip.Text = TipContent;
        }

        string tip = string.Empty;
        private void password_PasswordChanged(object sender, RoutedEventArgs e)
        {

            if (password.Password.Length != 0)
            {
               // this.Content = password.Password;
                this._Password = password.Password;
                if (!string.IsNullOrWhiteSpace(txtPasswordTip.Text))
                    tip = txtPasswordTip.Text;
                txtPasswordTip.Text = string.Empty;
            }
            else { txtPasswordTip.Text = tip; }
        }

        private string _tipContent = string.Empty;
        public string TipContent
        {
            get
            {
                return _tipContent;
            }
            set
            {
                if (value != _tipContent)
                {
                    _tipContent = value;
                    txtPasswordTip.Text = TipContent;
                }
            }
        }

        private string _Password = string.Empty;
        public string Password
        {
            get
            {
                return _Password;
            }
            set
            {
                if (value != _Password)
                {
                    _Password = value;
                  
                }
            }
        }
      
    }
}

 

待更新.......

 

以上是关于WPF中的TextBox一些问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 MVVM 从 WPF 中的 TextBox 进行正确的 DataGrid 搜索

简单的 TextBox 文本绑定失败 WPF

WPF inputbox的问题

如何让wpf 中的textbox只能输入整型或浮点型呢??

如何让wpf 中的textbox只能输入整型或浮点型呢??

WPF TextBox 一些设置技巧