wpf自定义控件

WPF设计自定义控件

江枫思渺然 提交于 2020-01-28 03:52:40
本文转载自: https://www.cnblogs.com/tmywu/archive/2013/05/22/3092706.html 作者:tmywu 转载请注明该声明。 在实际工作中,WPF提供的控件并不能完全满足不同的设计需求。这时,需要我们设计自定义控件。 这里LZ总结一些自己的思路,特性如下: Coupling UITemplate Behaviour Function Package 下面举例说说在项目中我们经常用到调音台音量条,写一个自定义控件模拟调音台音量条。 自定义控件SingnalLight,实现功能 接收来自外部的范围0~100的数值 实时显示接收数值 数值范围0~50显示绿色,50~85显示黄色,85~100显示红色,没有数值显示褐色 可在父控件上拖拽该控件 首先New WPF Application Project,在Ui上放2个Button,代码: 1 <Grid> 2 <StackPanel Orientation= " Horizontal " VerticalAlignment= " Bottom " > 3 <Button Content= " Start " Click= " Start_Click " ></Button> 4 <Button Content= " Stop " Click= " Stop_Click " ></Button

WPF自定义控件第二 - 转盘按钮控件

拟墨画扇 提交于 2020-01-25 04:17:37
原文: WPF自定义控件第二 - 转盘按钮控件 继之前那个 控件 ,又做了一个原理差不多的控件。这个控件主要模仿百度贴吧WP版帖子浏览界面左下角那个弹出的按钮盘。希望对大家有帮助。 这个控件和之前的也差不多,为了不让大家白看,文章最后发干货。 由于这个控件和之前一篇文章介绍控件基本差不多,所以一些基本的实现点不再赘述,文本将主要介绍与这个控件功能密切相关的部分。开始正题。 剧透一下,博主后来又在WinRT(真不知道该叫什么好了,现在该叫它UWP吗?)中把这个控件实现了一遍,说起来WinRT与WPF还是有很大不同的,这个控件的实现方式也有很多不同之处。后续的文章将会有介绍。 按惯例先上最终效果图: 弹出的子菜单可以点击,用于自定义需要点击子菜单实现的功能: 首先还是先来展示一下控件模板的基本结构: 基本上分为四部分:定义状态,定义中间的大按钮,圆形透明背景,以及显示一圈小按钮的Panel。 大按钮和圆形透明背景很简单: <Border Panel.ZIndex="999" x:Name="PART_CenterBtn" VerticalAlignment="Center" HorizontalAlignment="Center" Width="50" Height="50" CornerRadius="25" BorderThickness="0" BorderBrush="Blue

WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

倖福魔咒の 提交于 2019-12-29 10:26:25
一.前言.预览   申明 :WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接。 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文本框TextBox控件样式及扩展功能,实现了样式、水印、Label标签、功能扩展; 富文本框RichTextBox控件样式; 密码输入框PasswordBox控件样式及扩展功能; 效果图: 二.基本文本框TextBox控件样式及扩展功能 2.1 TextBox基本样式 样式代码如下: <!--TextBox默认样式--> <Style TargetType="{x:Type TextBox}" x:Key="DefaultTextBox"> <Setter Property="ContextMenu" Value="{DynamicResource TextBoxContextMenu}" /> <Setter Property="SelectionBrush" Value="{StaticResource TextSelectionBrush}" /> <Setter Property="FontFamily" Value="{StaticResource FontFamily}" /> <Setter

WPF自定义控件步骤

让人想犯罪 __ 提交于 2019-12-09 04:03:59
1 .在类库里面添加system.xaml的引用,给控件指定Name; 2.设计控件的外观,并将内部元素绑定到控件类的属性;此时即使没有在类中增加相关属性也不会报错,xaml类似html错误只是不显示而已; 3.定义静态的依赖项; 4.定义依赖项的包装属性; 5.在静态构造函数中注册依赖项属性,注意设置回调函数; 6.实现回调函数 7 定义路由事件并注册 8.定义路由事件的包装器 9.触发路由事件 <UserControl x:Class="CustomControls.ColorPickerUserControl" 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" xmlns:local="clr-namespace:CustomControls" mc:Ignorable="d" Name="ColorPicker" Height

WPF控件开发之自定义控件(5)

两盒软妹~` 提交于 2019-12-09 04:02:05
尽可能减少帮助器元素所必需的、特定于用户的绑定或属性设置。通常,帮助器元素需要某些绑定或属性设置才能在控件模板中正确工作。帮助器元素和模板化控件应当尽可能多地生成这些设置。在设置属性或者建立绑定时,注意不要重写由用户设置的值。具体的最佳做法如下所示: 命名的帮助器元素应当由父级标识,而且父级应当针对帮助器元素建立任何必需的设置。 对于基于类型的帮助器元素,应当直接针对它们建立任何必需的设置。这样做可能需要帮助器元素查找它在使用时的信息上下文,包括其 TemplatedParent(它在使用时的模板的控件类型)。例如,在用于 ContentControl 派生类型时,ContentPresenter 会自动将它的 TemplatedParent 的 Content 属性绑定到它的 Content 属性。 独立帮助器元素不能按这种方式进行优化,这是因为按照定义,帮助器元素和父级不能相互识别。 使用 Name 属性来标记模板中的元素。如果控件需要在样式中查找某个元素才能以编程方式访问它,则该控件应当使用 Name 属性和 FindName 范例来进行查找。控件不应在未找到所需元素时引发异常,而是应在不提示的情况下禁用需要该元素的功能。 使用最佳做法来表示样式中的控件状态和行为。 下面按顺序列出了用来表示样式中的控件状态更改和行为的最佳做法。您应当使用列表上的第一项来实现您的方案。

WPF 构建自定义控件 模板Template(圆形按钮、按钮事件)

筅森魡賤 提交于 2019-12-09 03:58:43
Template 软件“换肤” 一、自定义 按钮控件 模板 效果: XAML: <Window x:Class="WpfApplication1.Window5" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window5" Height="611.538" Width="469.615"> <Button x:Name="myButton" Width="100" Height="100" Click="myButton_Click"> <Button.Template> <ControlTemplate> <Grid x:Name="controlLayout"> <Ellipse x:Name="buttonSurface" Fill="LightBlue"/> <Label x:Name="buttonCaption" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" FontSize="20" Content="OK"/> </Grid> <

WPF控件开发之自定义控件(4)

自作多情 提交于 2019-12-09 03:38:50
处理输入 在 UserControl 示例中,RepeatButton 实例直接引用了代码中定义的事件处理程序。对于自定义 Control,命令是实现相同行为的一种更灵活的方式。控件可以定义命令,如下面的示例所示。 然后,模板中的元素可以引用这些命令,如下面的示例所示。 通过定义模板以及使用绑定和命令,您已将 NumericUpDown 控件从具有固定可视化效果的静态 UserControl 更改为可灵活自定义的自定义 Control。 外部控件库 最后一步是将 NumericUpDown 控件打包到其自己的程序集中,以使重用更容易。 创建主题文件 将 NumericUpDown 类移动到库程序集之后,需要移动样式定义。首先,需要创建一个“themes”文件夹用于存储所有主题文件。接下来,创建一个名为 generic.xaml 的文件。此文件将用作此程序集的所有资源查找的回退。 在 generic.xaml 中定义一个 ResourceDictionary,并在 ResourceDictionary 中放置 NumericUpDown 控件的样式。 定义 ThemeInfo 属性 若要找到 generic.xaml 中的 Style,宿主应用程序需要知道该程序集包含控件特定的资源。可以通过向类中添加程序集属性来实现该任务。由于程序集仅包含一般资源,因此将

wpf 自定义控件的使用

若如初见. 提交于 2019-12-09 03:38:15
wpf程序中使用自定义控件 新建用户控件 写一个带有图片的button 这是两个自定义按钮 添加可以点击 修改不可以点击 来自同一个自定义控件 <UserControl x:Class="WpfSop.Lib.Controls.IconButton" 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" xmlns:local="clr-namespace:WpfSop.Lib.Controls" mc:Ignorable="d" x:Name="iconButton" d:DesignHeight="100" d:DesignWidth="400"> <Grid> <Image x:Name="imageEnable" Grid.ColumnSpan="2" Source="../Images/btn_enable.png"

WPF自定义控件库

强颜欢笑 提交于 2019-12-09 03:34:11
2018年,为了大学能够顺利毕业,自己仿照QQ音乐做了一套包含Windows桌面客户端与Web后台管理的系统。物尽其用,今天跟大家分享一下自己写的一个WPF控件库。 大家可以看以下几张图片效果,都是可以实现的(歌曲列表等少部分不在此库中)。基本控件实现的方式可以看代码,如果有问题可以评论留言,互相交流。 1. 音乐播放器主界面 2. 搜索框 3. 皮肤管理 有兴趣的同学可以下载源代码,交流学习。 https://download.csdn.net/download/qq_31606375/10532332 来源: CSDN 作者: xiaoxiaotank 链接: https://blog.csdn.net/qq_31606375/article/details/80983627

WPF -- 自定义控件 (CustomControl)(三 下)

邮差的信 提交于 2019-12-09 03:32:13
在这里,我们将通过一个借鉴开源项目框架来讲一讲如何创建自己的控件库,let's go! 1,创建一个控件库项目 鼠标右击项目解决方案 -->添加-->新建项目 选择WPF自定义控件库 修改名称,点击“确认”。 这是会生成一个如下图的工程: 在AssemblyInfo.cs文件中注意自动生成了ThemeInfo信息,这段代码作用是把CustomControl和Themes中的Generic.xaml关联起来, CustomControl 1.cs中自动生成了如下代码: /// <summary> /// 按照步骤 1a 或 1b 操作,然后执行步骤 2 以在 XAML 文件中使用此自定义控件。 /// /// 步骤 1a) 在当前项目中存在的 XAML 文件中使用该自定义控件。 /// 将此 XmlNamespace 特性添加到要使用该特性的标记文件的根 /// 元素中: /// /// xmlns:MyNamespace="clr-namespace:WpfCustomControlLibrary1" /// /// /// 步骤 1b) 在其他项目中存在的 XAML 文件中使用该自定义控件。 /// 将此 XmlNamespace 特性添加到要使用该特性的标记文件的根 /// 元素中: /// /// xmlns:MyNamespace="clr-namespace