样式

1. DataTrigger和MultiDataTrigger可以实现任何触发器
    DataTrigger多了一个Binding的属性
    
        <Style x:Key="childStyle" TargetType="Control">
            <Setter  Property="Background" Value="BurlyWood"/>
            <Style.Triggers>
                <!-- 绑定当前的radio单选框,如果按钮选中,触发字体设置 -->
                <DataTrigger Binding="{Binding ElementName=radio, Path=IsChecked}" Value="True">
                    <Setter Property="FontSize" Value="20"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    
        <RadioButton Style="{StaticResource ResourceKey=childStyle}"
                     Name="radio" Content="我要变成20号字"></RadioButton>

模板

2. 模板分类4种都继承自FrameworkTemplate模板
                ____________________|____________________________
                |                              |                                           |
        控件模板                      条目容器模板                            数据模板
   (修改控件外观)                      (修改条目呈现方式)        (修改数据显示的方式)
   ControlTemplate                  ItemsPanelTempalte               DataTemplate
                                                        _________________________|________
                                                        |                                                  |
                原有模板的属性原封不动的投放到自定义模板中      分层数据模板
                     (绑定了控件Content属性,Text控件无)       (一般TreeviewItem用的比较多)
                                        ContentPresenter                            HierarhicalDataTemplate

3. ContentPresenter/ItemsPrresenter ----用来呈现内容控件的内容,它的ContentSource默认绑定控件的Content属性,如果在自定义控件中不添加<ContentPresent/>,它的内容将不会显示,只显示外观。

它也可以这样使用修改ContentSource

            <HeaderedContentControl Header="Header" HeaderStringFormat="I'm {0}"Content="Content" ContentStringFormat="I'm {0}"><HeaderedContentControl.Template><ControlTemplate TargetType="HeaderedContentControl"><DockPanel>                            <ContentPresenter ContentSource="Header" DockPanel.Dock="Top"></ContentPresenter>                            <!--等同于<ContentPresenter ContentSource="Content"/>--><ContentPresenter></ContentPresenter>                            </DockPanel></ControlTemplate></HeaderedContentControl.Template></HeaderedContentControl>
<Style x:Key="{x:Type ItemsControl}"TargetType="{x:Type ItemsControl}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type ItemsControl}"><Border Background="{TemplateBinding Background}"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"Padding="{TemplateBinding Padding}"SnapsToDevicePixels="true"><ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/></Border></ControlTemplate></Setter.Value></Setter></Style>

对于ItemsControl的自定义样式需要在控件外观模板中添加<ItemsPresenter/>

4. 模板也有Trigger属性功能和Style的Trigger一样

5. DataTemplate模板:ListBox-ComboBox-Listview等控件绑定数据模板显示的是该模板的Tosting()方法(默认为项目名.类名),可以通过重写该方法修改显示方式或者DisplayNamePath

注意DisplayNamePath是直接写数据源Item的属性名,不用加Binding,之前总是加{Binding PropertyName}无法实现效果,一度怀疑人生

<ListBox ItemsSource="{x:Static local:MainWindow.peoples}"/>
        <ListBox ItemsSource="{x:Static local:MainWindow.persons}"/>
        <ListBox ItemsSource="{x:Static local:MainWindow.persons}" DisplayMemberPath="Name"/>
        <ComboBox ItemsSource="{x:Static local:MainWindow.persons}" DisplayMemberPath="Name"/>

public static List<Person> persons = new List<Person>() {
            new Person() { Name = "Leo", Age = 23, Address = "山东" },
            new Person() { Name = "Gina", Age = 22, Address = "背景" } };

public static List<People> peoples = new List<People>() {
            new People() { Name = "Leo", Age = 23, Address = "山东" },
            new People() { Name = "Gina", Age = 22, Address = "背景" } };

6. ItemsPanelTempalte用来描述ItemsControl的容器样式类如ListBox的ItemsPanelTemplate是一个VisualizingStackPanel里面装了一个StackPanel。如果改成WrapPanel

<ListBox ItemsSource="{x:Static local:MainWindow.peoples}">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Width="120" Height="40"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>

7. HierarhicalDataTemplate分层数据模板

<XmlDataProvider x:Key="Info" XPath="Nations">
            <x:XData>
                <Nations xmlns="">
                    <Nation Name="中国">
                        <Provinces>
                            <Province Name="安徽">
                                <Citys>
                                    <City Name="安庆">
                                        <Countrys>
                                            <Country Name="潜山"/>
                                            <Country Name="桐城"/>
                                        </Countrys>
                                    </City>
                                    <City Name="合肥">
                                        <Countrys>
                                            <Country Name="长丰"/>
                                            <Country Name="肥东"/>
                                        </Countrys>
                                    </City>
                                </Citys>
                            </Province>
                            <Province Name="江苏">
                                <Citys>
                                    <City Name="南京">
                                        <Countys>
                                            <Country Name="溧水"/>
                                            <Country Name="高淳"/>
                                        </Countys>
                                    </City>
                                    <City Name="苏州">
                                        <Countys>
                                            <Country Name="常熟"/>
                                        </Countys>
                                    </City>
                                </Citys>
                            </Province>
                        </Provinces>
                    </Nation>
                </Nations>
            </x:XData>
        </XmlDataProvider>
        <HierarchicalDataTemplate DataType="Nation" ItemsSource="{Binding XPath=Provinces/Province}">
            <StackPanel Background="AliceBlue">
                <TextBlock FontSize="20" Text="{Binding XPath=@Name}"/>
            </StackPanel>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="Province" ItemsSource="{Binding XPath=Citys/City}">
            <StackPanel Background="LightBlue">
                <TextBlock FontSize="18" Text="{Binding XPath=@Name}"/>
            </StackPanel>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="City" ItemsSource="{Binding XPath=Countrys/Country}">
            <StackPanel Background="LightBlue">
                <TextBlock FontSize="18" Text="{Binding XPath=@Name}"/>
            </StackPanel>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="Country">
            <StackPanel Background="LightSalmon">
                <TextBlock FontSize="18" Text="{Binding XPath=@Name}"/>
            </StackPanel>
        </HierarchicalDataTemplate>
    </Window.Resources>
    <TreeView ItemsSource="{Binding Source={StaticResource ResourceKey=Info},XPath=Nation}"></TreeView>

WPF基础笔记(2)样式与模板相关推荐

  1. WPF QuickStart系列之样式和模板(Style and Template)

    原文:WPF QuickStart系列之样式和模板(Style and Template) 在WPF桌面程序中,当我们想构建一个统一的UI表现时(在不同操作系统下,显示效果一致),此时我们就需要使用到 ...

  2. WPF基础笔记(5)画刷

    WPF有5种画刷和1种自定义画刷,都是继承自基类Brush.基类如下 透明度    绝对转换     相对转换 以下主要讨论TileBrush 1. Image画刷 <Grid.Backgrou ...

  3. html+css基础笔记_CSS样式_part1_2

    1.CSS背景样式 属性: background-color:背景色 background-image:背景图 url背景地址,默认水平垂直铺满背景图 写法:background-image: url ...

  4. CSS基础笔记——边框样式

    在浏览网页的过程中,边框样式随处可见.几乎所有的元素都可以定义边框 边框样式有三个属性 想要为一个元素定义边框样式,必须要同时设置border-width.border-style.border-co ...

  5. CSS基础笔记——超链接样式

    在浏览器中,超链接默认情况下字体为蓝色,带有下划线,鼠标单击时字体为红色,单击后为紫色 而在CSS中,我们可以使用超链接伪类来定义超链接在鼠标单击的不同时期的样式 a:link{...} a:visi ...

  6. 第三章:资源,样式与模板

    总目录 前言 在了解完常用的控件之后,我们就需要学习WPF的资源以及样式与模板,通过样式与模板更改控件的外观,让我们做的界面能够更加的美观. 一.资源Resources 1.Resources基本知识 ...

  7. 《深入浅出WPF》笔记——模板篇

    原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...

  8. WPF——样式与模板

    文章目录 一.引言 二.样式与模板 1. 示例程序 Sample 2. 样式 Style 3. 控件模板 ControlTemplates 3.1. TemplateBinding 3.2. Cont ...

  9. WPF笔记(1.1 WPF基础)——Hello,WPF!

    WPF笔记(1.1 WPF基础)--Hello,WPF! 原文:WPF笔记(1.1 WPF基础)--Hello,WPF! Example 1-1. Minimal C# WPF application ...

最新文章

  1. 怎么提高单片机编程水平?
  2. 哪个星座更适合做产品经理?
  3. Apache https服务器配置笔记
  4. php中英文截取字符串长度,PHP截取字符串长度(中英文混合字符串)_PHP教程
  5. Oracle over函数学习
  6. 在gitee上创建自己的仓库步骤
  7. 百兆工业交换机与千兆工业交换机如何计算码率?
  8. Java中Web程序修改配置文件不重启服务器的方法
  9. SQL 中操作XML类型数据
  10. 查看mysql连接数_查看mysql 连接数
  11. python语言-Python语言介绍
  12. 图像增强——Roberts算子、Sobel算子、Prewitt算子、Laplace算子
  13. CSS文字排版终极指南
  14. 生物计算机 量子计算机,光子计算机、生物计算机和量子计算机
  15. 实验三 图像空间域平滑与锐化(Python实现)
  16. Shell IFS变量
  17. GPG(GnuPG)的安装和使用
  18. Android使用GoogleMap实现定位及定位回正
  19. 教师资格证考试备考资料大合集(历年真题+常用考点+模拟试题+面试),共460份,987M,附件中为网盘链接
  20. 日本一年中的重要节日及活动

热门文章

  1. 子墨对酒《三国杀》里论模式(一)工厂模式
  2. 智能书架中RFID技术是如何实现图书定位的
  3. 如何使用CASIA-OLHWDB联机手写汉字数据集?(解答篇)
  4. 高频交易真的提高了市场流动性吗?
  5. 2020年全球SDDC市场将达到1390亿美元
  6. 渗透测试学习总体概括
  7. C语言malloc两次,C语言malloc()的一个问题——堆越界的一个错误。
  8. 小米校招把某专业大学生惹毛了!
  9. java实现pdf生成,包括合并图片
  10. 大数据资源整合分析平台_企业大数据管理软件_大数据资源整合管理系统