zoukankan      html  css  js  c++  java
  • 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>
    View Code

    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; }
        }
    View Code

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

    附TextBox的水印效果样式

    <Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}">
                    <Style.Triggers>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter  Property="Background" Value="#5FCBCBCB" />
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsFocused" Value="False"/>
                                <Condition Property="Text" Value=""/>
                            </MultiTrigger.Conditions>
                            <MultiTrigger.Setters>
                                <Setter Property="Background">
                                    <Setter.Value>
                                        <VisualBrush Opacity="0.4" Stretch="None">
                                            <VisualBrush.Visual>
                                                <TextBlock FontSize="12" HorizontalAlignment="Center" VerticalAlignment="Center" Text="输入内容" />
                                            </VisualBrush.Visual>
                                        </VisualBrush>
                                    </Setter.Value>
                                </Setter>
                            </MultiTrigger.Setters>
                        </MultiTrigger>
                    </Style.Triggers>
                </Style>
  • 相关阅读:
    解决svn中文乱码的问题
    C#使用SQLite出错:无法加载 DLL“SQLite.Interop.dll”,找不到指定的模块
    手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like
    c# 串口SerialPort
    spy++使用指南
    FindWindow用法
    其他信息: 线程间操作无效: 从不是创建控件“控件名”的线程访问它。
    SVN设置必须锁定
    利用webBrowser获取页面iframe中的内容
    谨慎注意WebBrowser控件的DocumentCompleted事件
  • 原文地址:https://www.cnblogs.com/kybs0/p/5854620.html
Copyright © 2011-2022 走看看