WPF 带清除按钮的文字框SearchTextBox
来源:互联网 发布:剑网三菊花插件数据 编辑:程序博客网 时间:2024/06/16 11:22
基于TextBox的带清除按钮的搜索框
样式部分:
<!--带清除按钮文字框--> <Style TargetType="{x:Type local:XSearchTextBox}"> <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:XSearchTextBox}"> <Border CornerRadius="0" BorderBrush="#FFE2E0E0" BorderThickness="1" Padding="0,0,5,0" Background="{TemplateBinding Background}"> <DockPanel LastChildFill="True"> <Button Width="16" Height="16" DockPanel.Dock="Right" x:Name="PART_ContentHostClearButton"> <Button.Template> <ControlTemplate TargetType="{x:Type Button}"> <Border x:Name="PART_Border" CornerRadius="8" BorderBrush="Transparent" BorderThickness="0" Padding="2"> <Path x:Name="PART_Path" Data="M6,6 L6,6 10,10 M10,6 L10,6 6,10" Fill="Gray" Stretch="Fill" Stroke="Gray" StrokeThickness="2" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" TargetName="PART_Border"> <Setter.Value> <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> <GradientStop Color="Silver" Offset="0.0" /> <GradientStop Color="White" Offset="0.5" /> <GradientStop Color="Silver" Offset="0.0" /> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="Stroke" TargetName="PART_Path" Value="#FFBA3232"/> </Trigger> <Trigger Property="IsPressed" Value="True"> <Setter Property="UIElement.Effect"> <Setter.Value> <DropShadowEffect BlurRadius="10" Color="Black" Direction="0" Opacity="0.6" RenderingBias="Performance" ShadowDepth="0" /> </Setter.Value> </Setter> </Trigger> <Trigger Property="IsFocused" Value="True" /> </ControlTemplate.Triggers> </ControlTemplate> </Button.Template> </Button> <Button Width="16" Height="16" DockPanel.Dock="Right" Visibility="Collapsed" x:Name="PART_ContentHostSeachButton"> <Button.Template> <ControlTemplate TargetType="{x:Type Button}"> <Path Name="searchPath" Stretch="Fill" Fill="Gray" Data="F1 M 42.5,22C 49.4036,22 55,27.5964 55,34.5C 55,41.4036 49.4036,47 42.5,47C 40.1356,47 37.9245,46.3435 36,45.2426L 26.9749,54.2678C 25.8033,55.4393 23.9038,55.4393 22.7322,54.2678C 21.5607,53.0962 21.5607,51.1967 22.7322,50.0251L 31.7971,40.961C 30.6565,39.0755 30,36.8644 30,34.5C 30,27.5964 35.5964,22 42.5,22 Z M 42.5,26C 37.8056,26 34,29.8056 34,34.5C 34,39.1944 37.8056,43 42.5,43C 47.1944,43 51,39.1944 51,34.5C 51,29.8056 47.1944,26 42.5,26 Z "> <Path.RenderTransform> <RotateTransform Angle="-90" CenterX="8" CenterY="8" /> </Path.RenderTransform> </Path> </ControlTemplate> </Button.Template> </Button> <ScrollViewer DockPanel.Dock="Left" Margin="2" x:Name="PART_ContentHost" Background="{TemplateBinding Background}"/> </DockPanel> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>
代码部分:
public class XSearchTextBox : TextBox { static XSearchTextBox() { DefaultStyleKeyProperty.OverrideMetadata(typeof(XSearchTextBox), new FrameworkPropertyMetadata(typeof(XSearchTextBox))); } [CategoryAttribute("自定义属性"), DescriptionAttribute("获取或设置默认文字")] public string PlaceHolder { get { return (string)GetValue(PlaceHolderProperty); } set { SetValue(PlaceHolderProperty, value); } } [CategoryAttribute("自定义属性"), DescriptionAttribute("获取或设置默认文字")] public static readonly DependencyProperty PlaceHolderProperty = DependencyProperty.Register("PlaceHolder", typeof(string), typeof(XSearchTextBox)); public override void OnApplyTemplate() { base.OnApplyTemplate(); ButtonBase clearBtn = this.Template.FindName("PART_ContentHostClearButton", this) as ButtonBase; ButtonBase searchBtn = this.Template.FindName("PART_ContentHostSeachButton", this) as ButtonBase; searchBtn.Visibility = Visibility.Visible; clearBtn.Visibility = Visibility.Collapsed; this.Text = PlaceHolder; this.Opacity = 0.4; clearBtn.Click += (s, e) => { this.Text = ""; }; this.LostFocus += (s, e) => { if (this.Text.Length == 0) { this.Text = PlaceHolder; this.Opacity = 0.4; searchBtn.Visibility = Visibility.Visible; clearBtn.Visibility = Visibility.Collapsed; } else { clearBtn.Visibility = Visibility.Visible; searchBtn.Visibility = Visibility.Collapsed; } }; this.GotFocus += (s, e) => { if (this.Text == PlaceHolder) { this.Text = ""; } clearBtn.Visibility = Visibility.Visible; searchBtn.Visibility = Visibility.Collapsed; }; } protected override void OnTextChanged(TextChangedEventArgs e) { if (this.Text != PlaceHolder) { base.OnTextChanged(e); } if (this.Template != null) { ButtonBase clearBtn = this.Template.FindName("PART_ContentHostClearButton", this) as ButtonBase; ButtonBase searchBtn = this.Template.FindName("PART_ContentHostSeachButton", this) as ButtonBase; this.Opacity = 1; if (this.Text.Length > 0) { if (this.Text != PlaceHolder) { clearBtn.Visibility = Visibility.Visible; searchBtn.Visibility = Visibility.Collapsed; } else { this.Opacity = 0.4; searchBtn.Visibility = Visibility.Visible; clearBtn.Visibility = Visibility.Collapsed; } } else { if (this.IsFocused) { clearBtn.Visibility = Visibility.Visible; searchBtn.Visibility = Visibility.Collapsed; } else { this.Text = PlaceHolder; } } } } }
0 0
- WPF 带清除按钮的文字框SearchTextBox
- WPF 自定义TextBox(WPF带图片,占位符,清除按钮的TextBox)改造版
- 带清除按钮的EditText~
- Android-带清除按钮的输入框实现
- 带取消(清除)按钮的编辑框
- Android带清除按钮的EditText
- Android带清除按钮的文本框
- 自定义EditText:带清除按钮的EditText
- 一个带清除按钮的EditText-->ClearEditText
- 去除IE10自带的清除按钮
- 带清除按钮的EditText,自动清除输入
- android 带文字阴影的按钮
- 自定义带文字的返回按钮
- Android自定义控件开发系列(二)——带清除按钮的圆角输入框
- Android自定义View之有动画特效带清除按钮的输入框
- 自定义EditText-带清除所有输入按钮的EditText
- jquery十几行代码实现输入框自带清除按钮
- WPF PasswordBox样式(占位符,清除按钮 )
- textview字体颜色改变状态选择器
- Qt程序图标
- 如何在高并发分布式系统中生成全局唯一Id
- HTTPS简单原理介绍
- oracle数据库操作
- WPF 带清除按钮的文字框SearchTextBox
- Linux下chkconfig命令详解即添加服务以及两种方式启动关闭系统服务
- 计算机网络小白初次尝试性总结
- 【BZOJ】1260: [CQOI2007]涂色paint 区间dp
- 一个分布式服务器集群架构方案
- 2-20 多线程程序设计
- php var_export与var_dump的区别
- web安全 SQL Injection
- RCNN学习笔记(1):Rich feature hierarchies for accurate object detection and semantic segmentation