如何理解WPF中的样式(Style)与模板ControlTemplate

1.如何理解WPF中的Style

Style作用:
a.样式设置,用来为一组相同控件设置统一的样式
b.只能改变控件的已有属性值(比如颜色字体)

样式作用
StyleStyle.Resource\
~setter设置器
~Style.Trigger在Trigger中添加触发后的操作
    <Style TargetType="primitives:ToolWindowTab">
        <Style.Resources>
            <SolidColorBrush x:Key="BrushSelectedBackground" Color="Yellow" />
            <SolidColorBrush x:Key="TestColor" Color="Red"/>
            <SolidColorBrush x:Key="BrushActiveText" Color="Red" />

            <LinearGradientBrush x:Key="BrushBackground" StartPoint="0,0" EndPoint="0,1">
                <GradientStop Color="#FFC8C8C8" Offset="0" />
                <GradientStop Color="#FFFFFFFF" Offset="1" />
            </LinearGradientBrush>

            <LinearGradientBrush x:Key="BrushHighlightedBackground" StartPoint="0,0" EndPoint="0,1">
                <GradientStop Color="#FFA7D9F5" Offset="0" />
                <GradientStop Color="#FFFFFFFF" Offset="1" />
            </LinearGradientBrush>

            <Style TargetType="primitives:TabBorder">
                <Setter Property="IsBottom" Value="True" />
                <Setter Property="BorderThickness" Value="1" />
            </Style

注:Style中定义的属性和值会影响到所有ToolWindowTab类型的控件

setter设置器,设置样式、属性、触发器等的属性 ,

a.样式的继承

b.通用类型自动应用样式

c.x:Key=" xxx"到底有什么用?

1.
<Style TargetType=" Button">
xxx设置的参数标签
</Style>
2、
<Style x:Key="ButtonType" TargetType="Button">
xxxxx
</Style>

1.所有Button类型均受到Style的影响
2.只有Style=ButtonType的Button类型才会受到Style的影响

2.如何理解控件模板:ControlTemplate、DataTemplate、ItemPanelTemplate

ControlTemplate控件模板设置,用来为一组相同控件设置统一的外形Trigger // Visual Tree
ItemPanelTemplate
DataTemplate

3.DataTemplate

 <Window.Resources>
        <!-- 列表模板-->
        <DataTemplate x:Key="MyTemplate" DataType="{x:Type demo:People}">
            <Grid VerticalAlignment="Center" HorizontalAlignment="Center"
             Margin="4" >
             //划分为两个竖行,左侧添加图片,右侧添加文本
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <Image Source="{Binding Photo}" Width="50"
           Grid.Column="0"
           Grid.RowSpan="1"/>
                <TextBlock Text="{Binding Name}"
                           Grid.Column="1"
                           Grid.RowSpan="1"
                           HorizontalAlignment="Center"
                           VerticalAlignment="Center"/>
            </Grid>
        </DataTemplate>
    </Window.Resources>

注意:demo:People在后台定义

namespace demo
{
    public class People
    {
        private string name;
        private string photo;
        public People(string name1, string photo1)
        {
            this.name = name1;
            this.photo = photo1;
        }
        public string Name
        {
            get { return this.name; }
            set => this.name = value;

        }
        public string Photo
        {
            get { return this.photo; }
            set { this.photo = value; }
        }
    }
}

4.Trigger触发器

以上三种样式模板均有属于自己的触发器

5.定义模板

控件模板对应控件的Template
数据模板对应控件的ItemTemplate属性
面板模板对应控件的ItemsPanel属性

参考资料:

[1] 《控件、数据、面板模板》
https://blog.csdn.net/ceasadan/article/details/61414879
[2]《Wpf样式入门》
https://blog.csdn.net/qq_34802416/article/details/78231575
[3]《Wpf样式与资源》
https://blog.csdn.net/bfboys/article/details/52681246
[4] 《Wpf详解模板》
https://blog.csdn.net/normallife/article/details/44672707
[5] 《代码指定动态模板》
https://social.msdn.microsoft.com/forums/azure/pt-br/ac948850-651e-4615-8d14-f8453160a6ec/-wpf-c
[6] Wpf中的数据模板
https://blog.csdn.net/u014200184/article/details/22170179v

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值