• WPF控件模板


    前言

    WPF中每个控件都被设计为无外观的,这意味着我们可以通过一定的方式,完全重定义其可视化外观,而WPF也提供了这种改变外观的方式之一,我们称为模板。wpf的模板有多种方式,可以分为控件模板(ControlTemplate),控件列表模板(ItemsPanelTemplate)和数据模板(DataTemplate)。其中ControlTemplate和ItemsPanelTemplate都属于控件模板,但又有不同的表示。

    控件模板使用示例

    假设现在需要一个如下要求的按钮:

    image-20210627232821835

    实现的方式可能有很多种,这里使用控件模板演示一下

    <Button
                    Width="100"
                    Height="35"
                    Margin="0,10"
                    Background="#557BF6"
                    BorderThickness="0"
                    Foreground="White">
                    <Button.Template>
                        <ControlTemplate>
                            <Border Background="#557BF6" CornerRadius="5">
                                <StackPanel
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Orientation="Horizontal">
                                    <TextBlock Text="❤ " />
                                    <TextBlock Text="按钮2" />
                                </StackPanel>
                            </Border>
                        </ControlTemplate>
                    </Button.Template>
                </Button>
    

    如果把样式和模板全部写在单个控件里面,看起来会让人很抓狂,则可以使用前面提到的自定义样式,把这些公共的东西抽出来,改造后的代码如下:

    <ControlTemplate x:Key="btnTempleteStyle" TargetType="{x:Type Button}">
                <Border Background="#557BF6" CornerRadius="5">
                    <StackPanel
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        Orientation="Horizontal">
                        <TextBlock Foreground="White" Text="❤ " />
                        <ContentPresenter />
                    </StackPanel>
                </Border>
            </ControlTemplate>
    
    <Button
                    Width="100"
                    Height="35"
                    Content="按钮1"
                    Foreground="White"
                    Template="{StaticResource btnTempleteStyle}" />
    

    如果遇到复杂一点的控件,或者我们对某个控件属性不熟悉时,则可以通过实时可视化树去生成副本,然后在此基础上改

    找到需要修改的控件,右键点击编辑模板

    微信截图_20210627201247

    随后就会自动生成一大段代码

    微信截图_20210627202047

    可以把不相关或你不想要的全部去掉,也可在此基础上修改

    微信截图_20210627233817

    示例源代码

    源代码:https://github.com/luchong0813/WPFSeriesJobs/tree/master/3-ControlTemplete

  • 相关阅读:
    try_files $uri $uri/ /index.php?$query_string;
    关于declare(strict_types=1)的有效范围
    SVN客户端安装与使用
    Java日志框架中真的需要判断log.isDebugEnabled()吗?
    Spring4自动装配(default-autowire)
    java的@PostConstruct注解
    Google Guava之--cache
    Java类加载机制与Tomcat类加载器架构
    搞懂JVM类加载机制
    Java 类加载机制
  • 原文地址:https://www.cnblogs.com/chonglu/p/14942758.html
Copyright © 2020-2023  润新知