WPF自定义搜索框代码分享

 更新时间:2016年09月09日 11:40:24   作者:WinterFish  
这篇文章主要为大家详细介绍了WPF自定义搜索框代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

首先下载搜索图标:

控件中的搜索图标下载地址:http://www.easyicon.net/1183666-Search_icon.html 

搜索框设计过程比较简单: 

1、先定义一个Rectangle作为背景 

2、然后中间放TextBox输入,可以重写其中的模板。提示语Label放在模板中,可以在模板的触发器中控制隐藏显示~ 

3、搜索按钮-大家随便在网上下个就行了。 

UserControl界面: 

<UserControl x:Class="WpfApplication18.SearchControl"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
       mc:Ignorable="d" MinHeight="30" MinWidth="150" Background="Transparent"
       d:DesignHeight="30" d:DesignWidth="150">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="15"></ColumnDefinition>
      <ColumnDefinition Width="*"></ColumnDefinition>
      <ColumnDefinition Width="36"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Rectangle Grid.Column="0" Grid.ColumnSpan="3" Fill="LightGray" RadiusX="15" RadiusY="15" Opacity="0.8"></Rectangle>
    
    <TextBox x:Name="TbxInput" Grid.Column="1" KeyDown="TbxInput_OnKeyDown">
      <TextBox.Template>
        <ControlTemplate TargetType="TextBox">
          <Grid>
            <TextBlock x:Name="Uc_TblShow" Text="请输入..." Foreground="Gray" Opacity="0.5" VerticalAlignment="Center" Visibility="Collapsed"></TextBlock>
            <TextBox x:Name="Uc_TbxContent" Foreground="Gray" Background="Transparent" VerticalAlignment="Center" VerticalContentAlignment="Center" BorderThickness="0"
                 Text="{Binding ElementName=TbxInput,Path=Text,Mode=TwoWay}" FontSize="18"></TextBox>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger SourceName="Uc_TbxContent" Property="Text" Value="">
              <Setter TargetName="Uc_TblShow" Property="Visibility" Value="Visible"></Setter>
            </Trigger>
            <Trigger SourceName="Uc_TbxContent" Property="IsFocused" Value="True">
              <Setter TargetName="Uc_TblShow" Property="Visibility" Value="Collapsed"></Setter>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </TextBox.Template>
    </TextBox>
    
    <Button x:Name="BtnSearch" Grid.Column="2" Click="BtnSearch_OnClick" Cursor="Hand">
      <Button.Template>
        <ControlTemplate TargetType="Button">
          <Grid>
            <Image x:Name="Uc_Image" Source="1181298.png" Height="20" Width="20"></Image>
            <ContentPresenter></ContentPresenter>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
              <Setter TargetName="Uc_Image" Property="Height" Value="25"></Setter>
              <Setter TargetName="Uc_Image" Property="Width" Value="25"></Setter>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Button.Template>
    </Button>
  </Grid>
</UserControl> 

UserControl后台:

  public partial class SearchControl : UserControl
  {
    public SearchControl()
    {
      InitializeComponent();
    }

    public event EventHandler<SearchEventArgs> OnSearch; 
    private void BtnSearch_OnClick(object sender, RoutedEventArgs e)
    {
      ExeccuteSearch();
    }

    private void TbxInput_OnKeyDown(object sender, KeyEventArgs e)
    {
      ExeccuteSearch();
    }

    private void ExeccuteSearch()
    {
      if (OnSearch!=null)
      {
        var args=new SearchEventArgs();
        args.SearchText = TbxInput.Text;
        OnSearch(this, args);
      }
    }
  }
  public class SearchEventArgs : EventArgs
  {
    public string SearchText { get; set; }
  } 

直接引用就行了:<wpfApplication18:SearchControl></wpfApplication18:SearchControl>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 三种方法让Response.Redirect在新窗口打开

    三种方法让Response.Redirect在新窗口打开

    通过设置form的target属性同样可以让Response.Rederect所指向的url在新的窗口打开,下面为大家介绍三种具体的实现方法
    2013-10-10
  • asp.net 页面输出缓存

    asp.net 页面输出缓存

    最简单的缓存机制,把整个Aspx页面保存在服务器端内存中,用户请求页面时,直接从服务器端内存中提取数数据,不在经历页面的生命周期。
    2010-02-02
  • 时间轻松学会.NET Core操作ElasticSearch7的方法

    时间轻松学会.NET Core操作ElasticSearch7的方法

    这篇文章主要介绍了时间轻松学会.NET Core操作ElasticSearch7,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Silverlight中动态获取Web Service地址

    Silverlight中动态获取Web Service地址

    开发过Silverlight应用的朋友们相信都会遇到这样一个问题
    2009-11-11
  • asp.net 特定目录form验证

    asp.net 特定目录form验证

    前几听我的一个同事说form验证,我也只是听说过,说是一个很简单的验证,最近也在做一个小型的企业网站(因为刚进公司不久,老板就给了单独一个小项目练练手)。
    2009-06-06
  • ASP.NET导出数据到Excel的实现方法

    ASP.NET导出数据到Excel的实现方法

    在做asp.net程序时涉及到数据显示的时候多数会要求打印,而网页上的打印格式往往又不能满足需求,经常用的方法就是导入到Excel以后再进行打印。(仿佛这已经是老生常谈)今天在网上搜了一段打印的代码,觉得不错,需要打印的朋友可以看看。
    2013-07-07
  • .NET  Visual Studio 代码性能分析工具

    .NET Visual Studio 代码性能分析工具

    大家都知道性能优化对程序员至关重要,一个小问题可能导致程序瘫痪,这里我就给大家介绍如何使用工具帮助程序员进行代码性能优化,需要的朋友可以参考下
    2015-07-07
  • ASP.NET Core 使用Cookie验证身份的示例代码

    ASP.NET Core 使用Cookie验证身份的示例代码

    这篇文章主要介绍了ASP.NET Core 使用Cookie验证身份的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • ASP.NET配置文件Web.config用法详解

    ASP.NET配置文件Web.config用法详解

    这篇文章主要介绍了ASP.NET配置文件Web.config用法,详细解读了Web.config配置文件各个节点的含义及用法,需要的朋友可以参考下
    2014-10-10
  • asp.net gridview列宽固定的几种方法介绍

    asp.net gridview列宽固定的几种方法介绍

    以下是对asp.net gridview列宽固定的几种方法进行了介绍,需要的朋友可以过来参考下
    2013-09-09

最新评论