WPF自定义控件
一、添加WPF自定义控件库(Framework/Core)
删除掉创建类库时自带的类,以及Generic.xml文件下该控件对应的style代码(纯个人习惯)
二、类库中添加自己的自定义控件
以圆角矩形按钮为例:
类库项目新建自定义控件
public class MyButton : Button { static MyButton() { DefaultStyleKeyProperty.OverrideMetadata(typeof(MyButton), new FrameworkPropertyMetadata(typeof(MyButton))); } }
可添加自身属性、依赖属性来拓展该控件功能,供控件使用者使用。
Generic.xml下添加代码片段,改变button样式和模板
<Style TargetType="{x:Type local:MyButton}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:MyButton}"> <Border Name="bd" CornerRadius="10" Background="{TemplateBinding Background}" BorderThickness="1" BorderBrush="Black"> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> Border> ControlTemplate> Setter.Value> Setter> Style>
其中Border的背景一定要加,不然按钮除了中间位置,其它位置不能响应点击事件。
当项目中自定义控件很多时,可单独为控件定义xaml文件,在Generic.xml文件中统一调用。
使用的话,引用添加项目引用选择自己添加的自定义控件类库。
<Window x:Class="TestWPF.MainWindow" xmlns:MyNamespace="clr-namespace:ControlLibrary;assembly=ControlLibrary" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:TestWPF" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800" Name="mainWindow"> <Grid> <MyNamespace:MyButton Background="Transparent" Width="80" Height="60" Content="按钮" Click="MyButton_Click"/> Grid> Window>
效果如图: