WPF 精修篇 自定义控件
自定义控件 因为没有办法对界面可视化编辑 所以用来很少
现在实现的是 自定义控件的 自定义属性 和自定义方法
用VS 创建自定义控件后 会自动创建 Themes 文件夹和 Generic.xaml 还有自定义的类 这边是SeachControl
Gneneric
-
-
<Style TargetType="{x:Type local:SeachControl}">
-
<Setter Property="Template">
-
<Setter.Value>
-
<ControlTemplate TargetType="{x:Type local:SeachControl}">
-
<Grid>
-
<StackPanel Orientation="Horizontal" >
-
<TextBox Width="100" Height="20" Margin="0,0,5,0" Text="{Binding SearchText, RelativeSource={RelativeSource Mode=TemplatedParent},Mode=TwoWay}" Background="{TemplateBinding Background}"></TextBox>
-
<Button x:Name="button" Content="Select" Width="50" Height="20" ></Button>
-
</StackPanel>
-
</Grid>
-
</ControlTemplate>
-
</Setter.Value>
-
</Setter>
-
</Style>
自定义控件类
-
using System;
-
using System.Collections.Generic;
-
using System.Linq;
-
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 WpfApplication24
-
{
-
/// <summary>
-
/// 按照步骤 1a 或 1b 操作,然后执行步骤 2 以在 XAML 文件中使用此自定义控件。
-
///
-
/// 步骤 1a) 在当前项目中存在的 XAML 文件中使用该自定义控件。
-
/// 将此 XmlNamespace 特性添加到要使用该特性的标记文件的根
-
/// 元素中:
-
///
-
/// xmlns:MyNamespace="clr-namespace:WpfApplication24"
-
///
-
///
-
/// 步骤 1b) 在其他项目中存在的 XAML 文件中使用该自定义控件。
-
/// 将此 XmlNamespace 特性添加到要使用该特性的标记文件的根
-
/// 元素中:
-
///
-
/// xmlns:MyNamespace="clr-namespace:WpfApplication24;assembly=WpfApplication24"
-
///
-
/// 您还需要添加一个从 XAML 文件所在的项目到此项目的项目引用,
-
/// 并重新生成以避免编译错误:
-
///
-
/// 在解决方案资源管理器中右击目标项目,然后依次单击
-
/// “添加引用”->“项目”->[浏览查找并选择此项目]
-
///
-
///
-
/// 步骤 2)
-
/// 继续操作并在 XAML 文件中使用控件。
-
///
-
/// <MyNamespace:SeachControl/>
-
///
-
/// </summary>
-
public class SeachControl : Control
-
{
-
static SeachControl()
-
{
-
DefaultStyleKeyProperty.OverrideMetadata(typeof(SeachControl), new FrameworkPropertyMetadata(typeof(SeachControl)));
-
}
-
-
-
-
public string SearchText
-
{
-
get { return (string)GetValue(SearchTextProperty); }
-
set { SetValue(SearchTextProperty, value); }
-
}
-
-
// Using a DependencyProperty as the backing store for SearchText. This enables animation, styling, binding, etc...
-
public static readonly DependencyProperty SearchTextProperty =
-
DependencyProperty.Register("SearchText", typeof(string), typeof(SeachControl), new PropertyMetadata(""));
-
-
public delegate void OnSeachClick(object ob, SearchEventArgs args);
-
public event OnSeachClick SeachButtenClick;
-
-
public override void OnApplyTemplate()
-
{
-
base.OnApplyTemplate();
-
var button = GetTemplateChild("button");
-
if (button is Button)
-
{
-
(button as Button).Click += SeachControl_Click;
-
}
-
}
-
-
void SeachControl_Click(object sender, RoutedEventArgs e)
-
{
-
if (SeachButtenClick != null)
-
{
-
SeachButtenClick.Invoke(this, new SearchEventArgs() { SreachItem = SearchText });
-
}
-
}
-
-
}
-
}
创建参数类
-
public class SearchEventArgs:EventArgs
-
{
-
public string SreachItem { get; set; }
-
}
main 引用 这里可以看到自定义的事件
-
<Window x:Class="WpfApplication24.MainWindow"
-
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-
xmlns:MyNamespace="clr-namespace:WpfApplication24"
-
Title="MainWindow" Height="350" Width="525">
-
<Window.Resources>
-
-
-
</Window.Resources>
-
<Grid>
-
<MyNamespace:SeachControl HorizontalAlignment="Center" SearchText="嗯嗯" VerticalAlignment="Center" Background="#FFCBCBCB" SeachButtenClick="SeachControl_SeachButtenClick" />
-
</Grid>
-
</Window>
Main的内容类
-
private void SeachControl_SeachButtenClick(object ob, SearchEventArgs args)
-
{
-
MessageBox.Show("HI "+ args.SreachItem);
-
}
WPF 精修篇 自定义控件的更多相关文章
- WPF 精修篇 数据触发器
原文:WPF 精修篇 数据触发器 数据触发器 可以使用Binding 来绑定控件 或者数据源 来触发相关动作 举栗子 <Window.Resources> <Style Target ...
- WPF 精修篇 属性触发器
原文:WPF 精修篇 属性触发器 属性触发器是通过 某个条件触发改变属性 通过无代码实现功能 <Style TargetType="{x:Type Label}"> ...
- WPF 精修篇 样式继承
原文:WPF 精修篇 样式继承 这个 是新知识 样式可以继承 <Style x:Key="TextBlockStyleBase" TargetType="{x:Ty ...
- WPF 精修篇 用户控件
原文:WPF 精修篇 用户控件 增加用户控件 数据绑定还是用依赖属性 使用的事件 就委托注册一下 public delegate void ButtonClick(object b,EventArgs ...
- WPF 精修篇 DataGrid 筛选
原文:WPF 精修篇 DataGrid 筛选 DataGrid也可以分组 但是用的地方不多 就没写 筛选还是可以的 比如Datagrid数据量比较大 要做数据筛选 贴码 <DataGrid x: ...
- WPF 精修篇 DataGrid 数据源排序
原文:WPF 精修篇 DataGrid 数据源排序 效果 <DataGrid x:Name="datagrid" ItemsSource="{Binding Ele ...
- WPF 精修篇 数据绑定到对象
原文:WPF 精修篇 数据绑定到对象 数据绑定到对象 首先 我们需要一个对象 public class Preson { private string name; public string Name ...
- WPF 精修篇 数据绑定 更新通知
原文:WPF 精修篇 数据绑定 更新通知 开始更新一点有意思的了 首先 数据绑定 其中之一 Element 绑定 看例子 <Window x:Class="WpfApplicatio ...
- WPF 精修篇 依赖属性
原文:WPF 精修篇 依赖属性 依赖属性使用场景 1. 希望可在样式中设置属性. 2. 希望属性支持数据绑定. 3. 希望可使用动态资源引用设置属性. 4. 希望从元素树中的父元素自动继承属性值. 5 ...
随机推荐
- Axure导出的原型无法在谷歌浏览器浏览
1.下载crx后缀的文件. 2.修改crx后缀名为rar的压缩文件 3.解压刚才的rar文件 4.打开谷歌浏览器右上角的三个点 更多工具==>扩展程序 选择刚才的解压文件夹. 上面的图表示安装成 ...
- 小程序封装request请求,统一API
程序开发中都会调用后端工程师开发的API,小程序的开发文档提供了相对实用的APIwx.request(),但是在开发的过程中,又遇到了一些问题,在小程序的项目开发时,调用的API不止一个,同一个API ...
- node、npm、chrome、v8、sandbox是什么?
这些东西有些比较常用,有些仅知道个名称,但无论是熟悉还是陌生的,要比较精确地解释这些东西,是有一定的难度,可这些东西对前端开发非常重要,还是需要有明确的概念. PS:内容点到即止,不然一个东西一篇文章 ...
- 搭建Vue开发环境
1.安装Node.js 安装包下载地址: https://nodejs.org/en/ 安装时可以选择是否自动安装必要的工具,如Chocolatey.Python2,这里我选择了自动安装 Node.j ...
- sqlserver 筛选索引(filter index)在使用时需要注意的事项
sqlserver 的筛选索引(filter index)与常规的非筛选索引,加了一定的filter条件,可以按照某些条件对表中的字段进行索引,但是filter 索引在查询 使用上,并不等同于常规的索 ...
- HAProxy实现网站高并发集群
简介:HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会 ...
- robotframework框架 - 利用RequestsLibrary关键字轻松实现接口自动化!
robotframework(后续简称为robot)是一款自动化测试框架,可能做各种类型的自动化测试. 本文介绍通过robotframework来做接口测试. 第一步:安装第三方库,提供接口测试的关键 ...
- 品Spring:注解终于“成功上位”
历史还是抛弃了XML,当它逐渐尝到注解的甜头之后. 尤其是在Spring帝国,到处充满着注解的气息. 注解从一个提供附属信息的“门客”,蜕变为颇具中流砥柱的“君侯”. 注解成功登上了帝国的舞台,定会像 ...
- 急速下载pandas
使用国内源进行下载: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua ...
- PHP收集一些常用函数与好用的自定义函数
.自定义打印函数P //自定义打印function pp($data,$exit=0){// 定义样式 $str='<pre style="display: block;padding ...