精华内容
下载资源
问答
  • 一、前言 程序界面上的按钮多种多样,常用的就这几种:普通按钮、图标按钮、文字按钮、图片文字混合按钮。本文章记录了不同样式类型的按钮实现方法。下面话不多说了,来一起看看详细的介绍吧。 ...
  • WPF自定义进度条控件和slider 滑块控件源代码,WPF样式可自定义,ProgressBar,Slider,共享学习.
  • 以下是自定义控件需要考虑的: 1.需要为TextBox增加一个水印属性,并且这个水印属性可以自定义设置 2.黑白风格的颜色样式 水印属性 采用附加属性来给TextBox增加水印属性: public class TextBoxHelper: ...

    WPF中自带的TextBox的外观如下:
    在这里插入图片描述
    现在要把它变成有水印提示的TextBox,并且主题可以改变:
    白色主题:
    在这里插入图片描述
    黑色主题:
    在这里插入图片描述
    以下是自定义控件需要考虑的:
    1.需要为TextBox增加一个水印属性,并且这个水印属性可以自定义设置
    2.黑白风格的颜色样式

    水印属性

    采用附加属性来给TextBox增加水印属性:

    public class TextBoxHelper: DependencyObject
        {
    
    
            public static string GetWaterMark(DependencyObject obj)
            {
                return (string)obj.GetValue(WaterMarkProperty);
            }
    
            public static void SetWaterMark(DependencyObject obj, string value)
            {
                obj.SetValue(WaterMarkProperty, value);
            }
    
            // Using a DependencyProperty as the backing store for WaterMark.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty WaterMarkProperty =
                DependencyProperty.RegisterAttached("WaterMark", typeof(string), typeof(TextBoxHelper), new PropertyMetadata("请输入值"));
    
        }
    

    TextBox的模板中增加水印支持

    先把系统的TextBox的模板拿到:
    在这里插入图片描述
    这样我们在系统的模板上更改。
    增加水印,其实就是在Border下再增加一个TextBlock,如果TextBox的Text为空,则显示水印,否则不显示。
    修改后的模板如下:
    其中使用到了helper:TextBoxHelper.WaterMark需要引用xmlns:helper="clr-namespace:MyControls2020.Helper

    <Style x:Key="TextBoxStyle1" TargetType="{x:Type TextBox}">
            <Setter Property="Background" Value="{DynamicResource TextBox.BackgroundColor}"/>
            <Setter Property="BorderBrush" Value="{DynamicResource TextBox.NotMouseOver.BorderBrushColor}"/>
            <Setter Property="Foreground" Value="{DynamicResource TextBox.ForegroundColor}"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
            <Setter Property="HorizontalContentAlignment" Value="Left"/>
            <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
            <Setter Property="AllowDrop" Value="true"/>
            <Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
            <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
            <Setter Property="helper:TextBoxHelper.WaterMark" Value="请输入信息"></Setter>
            <Setter Property="CaretBrush" Value="{DynamicResource TextBox.ForegroundColor}"></Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Border x:Name="border" CornerRadius="5" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <Grid>
                                <TextBlock Margin="2,0,0,0" VerticalAlignment="Center" Visibility="Collapsed" x:Name="PART_WaterMark" Text="{TemplateBinding helper:TextBoxHelper.WaterMark}" Foreground="{DynamicResource TextBox.WaterMarkColor}"></TextBlock>
                                <ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
                            </Grid>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="false">
                                <!--<Setter Property="Opacity" TargetName="border" Value="0.56"/>-->
                                <Setter TargetName="border" Property="BorderBrush" Value="{DynamicResource TextBox.NotMouseOver.BorderBrushColor}"></Setter>
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource TextBox.MouseOver.BorderBrushColor}"/>
                            </Trigger>
                            <Trigger Property="IsKeyboardFocused" Value="true">
                                <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource TextBox.MouseOver.BorderBrushColor}"/>
                            </Trigger>
                            <Trigger Property="Text" Value="">
                                <Setter TargetName="PART_WaterMark" Property="Visibility" Value="Visible"></Setter>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/>
                        <Condition Property="IsSelectionActive" Value="false"/>
                    </MultiTrigger.Conditions>
                    <Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
                </MultiTrigger>
            </Style.Triggers>
        </Style>
    

    关键点:

     <Trigger Property="Text" Value="">
      <Setter TargetName="PART_WaterMark" Property="Visibility" Value="Visible"></Setter>
     </Trigger>
    

    这一句触发器,控制了水印的显示与隐藏
    上面用到了几个颜色样式,需要在黑白风格中去定义它们:
    白色风格:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:MyControls2020">
    
        <SolidColorBrush x:Key="Basic.Window.BackgroundColor" Color="White"></SolidColorBrush>
        <SolidColorBrush x:Key="Basic.ForegroundColor" Color="Black"></SolidColorBrush>
        
        
        <!--#region  TextBox-->
        <SolidColorBrush x:Key="TextBox.BackgroundColor" Color="Transparent"></SolidColorBrush>
        <SolidColorBrush x:Key="TextBox.ForegroundColor" Color="Black"></SolidColorBrush>
        <SolidColorBrush x:Key="TextBox.MouseOver.BorderBrushColor" Color="Blue" Opacity="0.5"></SolidColorBrush>
        <SolidColorBrush x:Key="TextBox.NotMouseOver.BorderBrushColor" Color="Gray"></SolidColorBrush>
        <SolidColorBrush x:Key="TextBox.WaterMarkColor" Color="Gray"></SolidColorBrush>
        <!--#endregion-->
    </ResourceDictionary>
    

    黑色风格

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:MyControls2020">
    
        <SolidColorBrush x:Key="Basic.Window.BackgroundColor" Color="Black"></SolidColorBrush>
        <SolidColorBrush x:Key="Basic.ForegroundColor" Color="White"></SolidColorBrush>
        
        
        <!--#region  TextBox-->
        <SolidColorBrush x:Key="TextBox.BackgroundColor" Color="Transparent"></SolidColorBrush>
        <SolidColorBrush x:Key="TextBox.ForegroundColor" Color="White"></SolidColorBrush>
        <SolidColorBrush x:Key="TextBox.MouseOver.BorderBrushColor" Color="#FF16ECE2" Opacity="0.5"></SolidColorBrush>
        <SolidColorBrush x:Key="TextBox.NotMouseOver.BorderBrushColor" Color="Gray"></SolidColorBrush>
        <SolidColorBrush x:Key="TextBox.WaterMarkColor" Color="Gray"></SolidColorBrush>
        <!--#endregion-->
    </ResourceDictionary>
    

    注意:两个颜色样式的字典中的KEY值必须完全一样!!!

    使用自定义的TextBox

    <Window x:Class="MyControls2020.Window_Black"
            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:MyControls2020"
            xmlns:helper="clr-namespace:MyControls2020.Helper"
            mc:Ignorable="d"
            Title="Window_Black" Height="450" Width="800" Background="{DynamicResource Basic.Window.BackgroundColor}">
        <Window.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="BlackStyle.xaml"></ResourceDictionary>
                    <ResourceDictionary Source="TextBox.xaml"></ResourceDictionary>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Window.Resources>
        <Grid>
            <TextBox Height="30" Width="200" helper:TextBoxHelper.WaterMark="请输入姓名" Style="{DynamicResource TextBoxStyle1}"></TextBox>
        </Grid>
    </Window>
    

    这两个资源字典

    <ResourceDictionary Source="BlackStyle.xaml"></ResourceDictionary>
    <ResourceDictionary Source="TextBox.xaml"></ResourceDictionary>
    

    是上面定义的黑色颜色样式和TextBox的模板,使用的时候需要引用
    helper:TextBoxHelper.WaterMark="请输入姓名"便是使用附加属性来设置TextBox的提示水印

    展开全文
  • WPF自定义模板控件

    2013-04-08 16:44:05
    使用UserControl创建WPF模板控件,通过该模板设计可变部分内容,模板为不可变内容。
  • 一个自定义编写的WPF的Textbox文本框,带水印功能,错误信息显示,是否必填项。将常用的textbox需要的功能都包含了,一个控件解决texbox的问题.简单易用。如果有问题,可留言,我看见了尽量改正。
  • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...开发工具与关键技术:Visual Studio 2017、模板 作者:邓崇富 撰写时间:2019 年 5 月 24 日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    开发工具与关键技术:Visual Studio 2017、模板

    作者:邓崇富

    撰写时间:2019 年 5 月 24 日

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    在WPF中,通过引入模板(Template)微软将数据和算法的“内容”与“形式”解耦了。WPF中的Template分为两大类:

    1. ControlTemplate是算法内容的表现形式,一个控件怎样组织其内部结构才能让它更符合业务逻辑、让客户操作起来更加舒服就是由它来控制的。他决定了控件“长成什么样子”,并让程序员有机会在控件原有的内部逻辑基础上扩展自己的逻辑。
    2. DataTemplate是数据内容的表现形式,一条数据显示成什么样子,是简单的文本还是直观的图形动画就由它来决定。

    总而言之,Template就是“外衣”,ControlTemplate是控件的外衣,DataTemplate是数据的外衣。

    数据的外衣(DataTemplate):

    DataTemplate常用的地方有3个,分别是:

    1. ContentControl的ContentTemplate属性,相当于给ContentControl的内容穿衣服。
    2. ItemsControl的ItemTemplate属性,相当于给ItemsControl的数据条目穿衣服。
    3. GridViewColumn的CellTemplate属性,相当于给GridViewColumn单元格里的数据穿衣服。

    下面用个例子来对比UserControl与DataTemplate的使用。假如有一列汽车的数据,这列数据显示在ListBox里,要求ListBox的条目显示汽车的厂商图标和简要的参数,单击某个条目后在窗体的详细内容区域显示汽车的图片和详细参数。

    首先要为在项目里建立资源管理目录并把图片添加进来。Logo的文件名与厂商名称要一致,照片的文件名则与车名一致,因为无论是使用UserControl还是DataTemplate,厂商的Logo和汽车的照片都要用到的。

    文件结构如下图:

    首先创建一个Car数据类型的类文件:

    namespace WPF练习

    {

       public class Car

        {

            public string Automaker { get; set; }

            public string Name { get; set; }

            public string Year { get; set; }

            public string TopSpeed { get; set; }

        }

    }

    为了在ListBox里显示Car类型数据,我们需要创建一个UserControl,命名为CarListItemView。这个UserControl由一个Car类型实例在背后支持,当设置这个实例的时候,界面元素将实例的属性值显示在各个控件里。CarListItemView的XAML的代码如下:

    <UserControl x:Class="WPF练习.CarListItemView"

                 <!--省略了两个命名空间-->

        <Grid Margin="2">

            <StackPanel Orientation="Horizontal">

                <Image x:Name="ImageLogos" Grid.RowSpan="3" Width="64" Height="64"/>

                <StackPanel Margin="5,10">

                    <TextBlock x:Name="textBlockName" FontSize="16" FontWeight="Bold"/>

                    <TextBlock x:Name="textBlockYear" FontSize="14"/>

                </StackPanel>

            </StackPanel>

        </Grid>

    </UserControl>

    CarListItemView界面的后台代码如下:

    public partial class CarListItemView : UserControl

        {

            public CarListItemView()

            {

                InitializeComponent();

            }

            private Car car;

            public Car Car

            {

                get { return car; }

                set

                {

                    car = value;

                    this.textBlockName.Text = car.Name;

                    this.textBlockYear.Text = car.Year;

                    string uriStr = string.Format(@"/Pitrues/Logos/{0}.PNG", car.Automaker);

                    this.ImageLogos.Source = new BitmapImage(new Uri(uriStr, UriKind.Relative));

                }

            }

        }

    类似于上面的原理,还需要为Car类型数据准备一个详细信息的视图,在创建一个UserControl命名为CarDetailView, XAML代码如下:

    <UserControl x:Class="WPF练习.CarDetailView"

                <!--此处省略了两个命名空间-->

     

        <Border BorderBrush ="Black" BorderThickness="1" CornerRadius="6">

            <StackPanel Margin="5">

                <Image x:Name="ImagePhoto" Width="400" Height="250"/>

                <StackPanel Orientation="Horizontal" Margin="5,0">

                    <TextBlock Text="Name:" FontWeight="Bold" FontSize="20"/>

                    <TextBlock x:Name="textBlockName" FontSize="20" Margin="5,0"/>

                </StackPanel>

                <StackPanel Orientation="Horizontal" Margin="5,0">

                    <TextBlock Text="Automaker:" FontWeight="Bold"/>

                    <TextBlock x:Name="textBlockAutomaker" Margin="5,0"/>

                    <TextBlock Text="Year:" FontWeight="Bold"/>

                    <TextBlock x:Name="textBlockYear" Margin="5,0"/>

                    <TextBlock Text="Top Speed:" FontWeight="Bold"/>

                    <TextBlock x:Name="textBlockTopSpeed" Margin="5,0"/>

                </StackPanel>

            </StackPanel>

        </Border>

    </UserControl>

    XAML的后台代码:

    public partial class CarDetailView : UserControl

        {

            public CarDetailView()

            {

                InitializeComponent();

            }

            private Car car;

            public Car Car

            {

                get { return car; }

                set

                {

                    car = value;

                    this.textBlockName.Text = car.Name;

                    this.textBlockYear.Text = car.Year;

                    this.textBlockTopSpeed.Text = car.TopSpeed;

                    this.textBlockAutomaker.Text = car.Automaker;

                    string uriStr = string.Format(@"/Pitrues/Images/{0}.jpg", car.Name);

                    this.ImagePhoto.Source = new BitmapImage(new Uri(uriStr, UriKind.Relative));

                }

            }

    }

    最后把上面两个界面组装到主窗体上,下面是组窗体的XAML代码:

    <Window x:Class="WPF练习.Window8"

           <!--此处省略里四个命名空间-->

            xmlns:local="clr-namespace:WPF练习"

            mc:Ignorable="d"

            Title="Window8" Height="350" Width="623">

        <StackPanel Orientation="Horizontal" Margin="5">

            <local:CarDetailView x:Name="detailView"/>

            <ListBox x:Name="ListBoxCars" Width="180" Margin="5,0" SelectionChanged="listBoxCars_SelectionChanged"/>

        </StackPanel>

    </Window>

    下面是组窗体的后台代码:

    public partial class Window8 : Window

        {

            public Window8()

            {

                InitializeComponent();

                InitialCarList();

            }

            private void InitialCarList()

            {

                List<Car> carList = new List<Car>()

                {

                    new Car(){Automaker = "Lamborghini",Name = "Diablo",Year = "1990",TopSpeed = "340"},

                    new Car(){Automaker = "Lamborghini",Name = "Murcielago",Year = "2001",TopSpeed = "353"},

                    new Car(){Automaker = "Lamborghini",Name = "Gallardo",Year = "2003",TopSpeed = "325"},

                    new Car(){Automaker = "Lamborghini",Name = "Reventon",Year = "2008",TopSpeed = "356"}

     

                };

                foreach (Car car in carList)

                {

                    CarListItemView view = new CarListItemView();

                    view.Car = car;

                    this.ListBoxCars.Items.Add(view);

                }

            }

            //选项变化事件的处理器

            private void listBoxCars_SelectionChanged(object sender,SelectionChangedEventArgs e)

            {

                CarListItemView view = e.AddedItems[0] as CarListItemView;

                if (view != null)

                {

                    this.detailView.Car = view.Car;

                }

            }

    }

    运行后单击ListBox里的条目,效果图如下:

    展开全文
  • wpf自定义控件

    2020-12-12 19:02:29
    在学习wpf中,wpf中有许多已经定义好的控件供我们选择应用,当我需要定义一个带文字标识的输入框时,模板中自带的控件的默认下的效果,与我想要的有所差别,而解决这个问题在于自行定义模板中的样式,下面就以文本...

    在学习wpf中,wpf中有许多已经定义好的控件供我们选择应用,当我需要定义一个带文字标识的输入框时,模板中自带的控件的默认下的效果,与我想要的有所差别,而解决这个问题在于自行定义模板中的样式,下面就以文本输入框为例来进行说明。
    文本输入框一般使用跟来进行设定,当我需要设置一个文字标识,在文字标识后让用户进行输入时,通常设置一个textblock,跟一个textbox文本盒,在默认的grid布局下,同时放置一给textblock跟textbox,后者会将前者覆盖掉,从而导致textblock不可见。解决办法:通过设置布局设定,让这两个控件分离,或按指定的位置进行放置,不然,textblock控件设置为水平居中,字体大小设置为12,text文本值为默认下的显示值。
    在这里插入图片描述
    在页面布局完成后,放置textblock控件,默认下的控件样式与我想要的样式还有所不同,这里通过在资源字典中添加设置textbox的样式,设置成直线的输入线,自定义边框画刷为黑色,垂直居中,水平向左,给边框厚度设置值,由于设置成直线的状态这里只给下设为1.

    在这里插入图片描述
    同样的以相同的方式设置textblock控件的样式,对其边框厚度,水平,垂直方向进行设置。在这里插入图片描述
    经过设置后,textblock跟textbox的展示效果,便呈现出以下的样子,更直观更形象地展示各类输入框,选择框,时间选择等。

    效果如下图
    在这里插入图片描述
    总结:通过自定义控件样式实现我所想要的效果,为页面的的个性化提供更多的可能,让页面更灵活,功能更丰富。

    展开全文
  • 如何创建组合控件,可以自行百度,本章主要介绍如何访问子控件。...例如我们创建了这么一个自定义控件"datatemplate2",添加一个 Loaded="inputText_load"事件。 <DataTemplate x:Key="datatemplate2"...

    转载https://jingyan.baidu.com/article/acf728fd99706ff8e410a340.html
    如何创建组合控件,可以自行百度,本章主要介绍如何访问子控件。
    例如我们创建了这么一个自定义控件"datatemplate2",添加一个 Loaded="inputText_load"事件。

     <DataTemplate x:Key="datatemplate2">
                <StackPanel Orientation="Horizontal">
                    <Label Content="智能触发个数 n:"/>
                    <TextBox Text="   " x:Name="inter_trigger_nums_read" Width="90" Background="AliceBlue" Loaded="inputText_load"/>               
                </StackPanel>
            </DataTemplate>
    

    然后在.CS后台代码

            TextBox inputtextbox;
            private void inputText_load(object sender, RoutedEventArgs e)
            {
                this.inputtextbox = sender as TextBox;
            }
    

    这样在控件加载完成以后可以访问模板里的inputtextbox,以后可以对他添加其他事件。

    展开全文
  • 创建了一个自定义控件,在使用的时候想设置一个Style控制一个界面内的所有该控件的样式,发现设置了样式之后控件的模板失效了,我可以理解为新设置的样式将该自定义控件的默认样式覆盖了所以读取不到模板。但是WPF...
  • 原文:WPF自定义控件(四)の自定义控件在实际工作中,WPF提供的控件并不能完全满足不同的设计需求。这时,需要我们设计自定义控件。 这里LZ总结一些自己的思路,特性如下: Coupling UITemplate Behaviour ...
  • WPF 自定义控件创建及使用教程

    千次阅读 2020-02-02 22:11:53
    1、WPF自定义控件的创建 自定义控件比较灵活,按照教程学习比较简单 步骤一:新建WPF应用并添加WPF自定义控件,添加后会有Themes文件夹和customControl的cs 文件 2、按照cs文件中的步骤使用自定义控件 这...
  • WPF自定义控件

    千次阅读 2019-08-18 09:28:15
    WPF中有一个ControlTemplate类 ControlTemplate指定控件的可视结构和可视行为。...—自定义控件,定义自己所需的按钮模板--> <Window.Resources> <!--按钮样式:用x:Key设置唯一键--&g...
  • AsyncImage 是一个封装完善,使用简便,功能齐全的WPF图片控件,比直接使用Image相对来说更加方便,但它的内部仍然使用Image承载图像,只不过在其基础上进行了一次完善成熟的封装 AsyncImage解决了以下问题1) 异步...
  • WPF源码:资源样式做成用户自定义控件让另一个项目调用.rar WPF源码:资源样式做成用户自定义控件让另一个项目调用.rar
  • 原文:WPF自定义控件(一)の控件分类一、什么是控件(Controls)  控件是指对数据和方法的封装。控件可以有自己的属性和方法,其中属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能、控件创建过程...
  • DataGrid模板自定义控件使用,依赖属性的绑定
  • 原文:WPF自定义控件(二)の重写原生控件样式模板 话外篇: 要写一个圆形控件,用Clip,重写模板,去除样式引用圆形图片可以有这三种方式。  开发过程中,我们有时候用WPF原生的控件就能实现自己的需求,但是...
  • WPF自定义控件中如果需要开放属性,则定义依赖项属性 步骤1:在cs文件中通过快捷键,新增依赖项属性 步骤二: 在Generic中绑定模板属性 第三步骤: 使用属性 第二部分: 公开事件 在设置依赖项...
  • WPF自定义控件 按钮 (一)

    千次阅读 2017-09-19 09:58:35
    从这里开始,记录WPF自定义控件的制作方法,相比制作传统winform的自定义控件来说,WPF自定义控件做起来更加优雅,效果也更好。 从最常用的控件 Button 开始: 首先从MSDN上查看 Button 控件的默认样式和模板,...
  • WPF自定义样式与模板

    2021-09-17 19:12:25
    ----自定义样式与模板。 一、样式 在WPF中我们可以使用Style来设置控件的某些属性值,并使该设置影响到指定范围内的 所有该类控件或影响指定的某一控件,比如说我们想将窗口中的所有按钮都保持某一种 风格,那么我们...
  • 一、自定义控件的基本步骤: (本示例项目名称为:W;...2、则会弹出如下窗口,在该窗口中选择“自定义控件(WPF)”并修改类“名称”,点击“添加” 3、添加成功后则会在该...
  • wpf自定义控件

    2019-11-03 20:43:09
    现在已经会了通过blend,制作控件的style和模板了,但是,我今天提出了一个想法,我能否自己写一个像button那样的控件类呢? 然后我的应用程序直接继承我自己写的类,就可以直接像button类那样呢?说的通俗一点,举...
  • 我去年写过一个在UWP自定义控件的系列博客,大部分的经验都可以用在WPF中(只有一点小区别)。这篇文章的目的是快速入门自定义控件的开发,所以尽量精简了篇幅,更深入的概念在以后介绍各控件的文章中实际运用到才...
  • WPF自定义控件-按钮-DoubleAnimation动画

    千次阅读 2018-09-25 22:09:40
    WPF自定义按钮-DoubleAnimation动画效果展示原理下面为其中一个样式的代码到此代码都结束了补充...自定义控件继承Button,模板为两个重叠的Border 下面为其中一个样式的代码 自定义控件文件(MyButton.cs),自...
  • 目录 新建项目 用户控件和自定义控件...还有我们熟悉的WPF 自定义控件库和用户控件 用户控件和自定义控件的区别 在WPF中,概念上来说用户自己制作的控件有两种:用户控件和自定义控件。但是这两种控件之间有什么..
  • ▪ 扁平化 <Window.Resources> <Style x:Key="styleProgressBar" TargetType="ProgressBar"> <Setter Property="Template"> ...ControlTemplate TargetType="ProgressBar">
  • WPF自定义控件

    万次阅读 2018-11-07 20:39:41
    WPF自定义控件
  • 1、问题的描述:我自定义一个MyButton,该Button中包含一个TextBlock和一个Button,我想讲TextBlock的Text属性对外暴露,如:Mybutton.Text实际上就是TextBlock.Text。 2、解决方法: ①在自定义的空间的cs文件中...
  • WPF自定义控件依赖属性怎么实时变化。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,364
精华内容 2,145
关键字:

wpf自定义控件模板