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 ...
随机推荐
- Analyze Data 分析数据
In this lesson, you will learn how to add the Analysis functionality to your application. For this p ...
- [转]UIpath advanced certification dumps
本文转自:https://dotnetbasic.com/2019/06/uipath-advanced-certification-dumps.html UiPath advanced certif ...
- 2019 DevOps 必备面试题——容器化和虚拟化
原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...
- 基于django的个人博客网站建立(五)
基于django的个人博客网站建立(五) 前言 网站效果可点击这里访问 之前鸽了两天,今天继续再写点 主要内容 今天加了个展示照片的功能,就叫他生活记录吧 先建表 class Record(model ...
- 如何清除Mac上的空间,让Mac更有效地运行
清理Mac上的空间通常被认为是一件必须要做的事情.因为这样,Mac将在驱动器上具有更多可用空间,从而可以更好地运行,并且您(以及系统和各种应用程序)可以根据需要利用额外的空间. 您可能会问的一个问题是 ...
- Educational Codeforces Round 77 (Rated for Div. 2)
A: 尽可能平均然后剩下的平摊 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int ...
- 从零开始学习java一般需要多长时间?
从零开始学习java一般需要多长时间? 其实学java一般要多久?因人而异,例如一个零基础的小白自学java,每天学习8个小时来算,而且在有学习资料的基础上,每天学习,从零到找到工作,起码要半年起步, ...
- Linux中,Tomcat 怎么承载高并发(深入Tcp参数 backlog)
一.前言 这两天看tomcat,查阅 tomcat 怎么承载高并发时,看到了backlog参数.我们知道,服务器端一般使用mq来减轻高并发下的洪峰冲击,将暂时不能处理的请求放入队列,后续再慢慢处理.其 ...
- linux命令-开关机命令与系统痕迹命令
一.关机和重启命令 1.sync 命令 命令名称:sync 英文原意:flush file system buffers 所在路径:/bin/sync 执行权限:所有用户 功能描述:刷新文件系统缓冲区 ...
- cookie及其特点
关于cookie我们首先要知道cookie是指会话跟踪技术 我们可以用它来做一下事情,但是我们需要清楚cookie是不安全的 功能: 会话状态管理(如用户登录状态.购物车.游戏分数和其它需要记录的信息 ...