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 ...
随机推荐
- LiggEasyWinApp-103-Ligg.EasyWinForm:View
首先请在VS里打开下面的文件,我们将对源码分段进行说明: View(视图):一个Function(功能)对应多个View(视图),本框架用View(视图)实现多窗体(MDI)的效果. 一个View(视 ...
- LinkedHashMap源码学习
描述 可以按照添加元素的顺序对元素进行迭代的HashMap的子类. 注意,上面说的是加元素的顺序.也就是说,更新元素时,是不会影响遍历结构的的.除非设置参数accessOrder为true,将更新元素 ...
- angular cli 反向代理实现跨域
版本: 1.后端实现跨域(php) header("Access-Control-Allow-Origin: *"); // // 响应类型 // header('Access-C ...
- Docker容器镜像打成tar包
简述需求: 在现在容器上保存镜像进行打包,在另一台服务上使用 首先查看下现有要打tar包的容器 docker ps -a 接下来用commit参数进行保存镜像, -a 提交人的姓名 -m “提交内容 ...
- Kingfisher
Kingfisher ima1.kf.setImage(with: url) 为了兼容macOS, IOS 通过协议定义了kf,实际上就是本身 KingfisherOptionsInfo 可以配置一些 ...
- Xcode真机运行报错iPhone has denied the launch request
1.打开钥匙串 ->Apple Worldwide Developer Relations Certification Authority ->双击 并点击信任->选择使用系统默认2 ...
- maven配置多个镜像
问题场景 1.国内访问maven默认远程中央镜像特别慢 2.用阿里的镜像替代远程中央镜像 3.大部分jar包都可以在阿里镜像中找到,部分jar包在阿里镜像中没有,需要单独配置镜像 解决方案 setti ...
- Go Modules使用教程
Go Modules 不完全教程 文章转载自公众号 Golang 成神之路 , 作者 L Go Modules 是 Golang 官方最近几个版本推出的原生的包管理方式,在此之前,社区也不乏多种包管理 ...
- phpStorm+xdebug调试(php7.3)
一.首先安装xdebug 安装xdebug比 ,运行php -i >phpinfo.txt 或者 echo phpinfo();将全部信息贴到https://xdebug.org/wizard. ...
- Reinforcement Learning by Sutton 第三章习题答案
好不容易写完了 想看全部的欢迎点击下面的github https://github.com/LyWangPX/Solutions-of-Reinforcement-Learning-An-Introd ...