精华内容
下载资源
问答
  • 来自:http://www.th7.cn/Program/WPF/2011/12/21/51676.shtml ControlTemplate用于描述控件本身. 使用TemplateBinding来绑定控件自身的属性, 比如{TemplateBinding Background}  DataTemplate用于描述控件的...
       来自:http://www.th7.cn/Program/WPF/2011/12/21/51676.shtml

    ControlTemplate用于描述控件本身. 使用TemplateBinding来绑定控件自身的属性, 比如{TemplateBinding Background}   DataTemplate用于描述控件的Content. 使用Binding来绑定数据对象的属性, 比如{Binding PersonName}   一般来说, ControlTemplate内有一个ContentPresenter, 这个ContentPresenter的ContentTemplate就是DataTemplate类型   Control类型   - Template属性 (ControlTemplate类型)   - ContentPresenter   - ContentTemplate (DataTemplate类型)   ContentControl类型   - Template属性 (ControlTemplate类型) 继承自Control   - ContentTemplate (DataTemplate类型)   ItemsControl类型   - Template属性 (ControlTemplate类型) 继承自Control   - ItemsPanel属性 (ItemsPanelTemplate类型) 指定布局容器   - ItemTemplate属性 (DateTemplate类型) 每个Item的Template
    <Style TargetType="Button"> <Setter Property="OverridesDefaultStyle" Value="True"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid> <Ellipse Fill="{TemplateBinding Background}"/> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>

     

    展开全文
  • WPF控件模板和数据模板的区别

    千次阅读 2019-08-10 23:46:46
    是的,最近在看WPF,也算是加深下c#的知识,毕竟winform的界面有的时候真的不是很美观。WPF中模板与Style不同,Style只能改变控件的已有属性值(比如...数据模板跟控件模板的区别主要体现在,通常情况下,控件模板只...

    是的,最近在看WPF,也算是加深下c#的知识,毕竟winform的界面有的时候真的不是很美观。WPF中模板与Style不同,Style只能改变控件的已有属性值(比如颜色字体)来定制控件,形同HTML中的CSS,但控件模板可以改变控件的内部结构(VisualTree,视觉树)来完成更为复杂的定制,其实WPF的每一个控件都有一个默认的模板。

    数据模板跟控件模板的区别主要体现在,通常情况下,控件模板只是为了自己而呈现的,并不反映基础数据。 例如,一个Button不会被绑定到一个业务对象 - 它只是可以被点击。 而ContentControl或ListBox通常显示为可以为用户呈现数据。因此,DataTemplate用于为底层数据提供可视结构,而ControlTemplate与底层数据无关,仅为控件本身提供可视化布局。

    ControlTemplate通常只包含TemplateBinding表达式,绑定回控件本身的属性,而DataTemplate将包含标准绑定表达式,并绑定到其DataContext(业务/域对象或视图模型)的属性,它们面对的绑定对象类型不一致。

    对此,查看下面简单的数据模板和控件模板示例,体验区别:

    <Window
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfBook"
            xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" x:Class="WpfBook.ImageButton"
            Title="ImageButton" Height="300" Width="300" Activated="Window_Activated">
        <Window.Resources>
            <ControlTemplate x:Key="ImageButton-ControlTemplate" TargetType="{x:Type Button}">
                <Grid>
                    <Ellipse Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"  Fill="{TemplateBinding Background}"/>
                    <TextBlock Margin="{TemplateBinding Padding}" VerticalAlignment="Center"  HorizontalAlignment="Center"  Text="{TemplateBinding Content}" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Foreground" Value="Red" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
     
            <DataTemplate x:Key="ImageButton-DataTemplate" DataType="{x:Type local:Person}">
                <TextBlock x:Name="tb" Text="{Binding Name}" Margin="1" />
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding IsOnline}" Value="False">
                        <Setter TargetName="tb" Property="Foreground" Value="Gray" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
     
            <DataTemplate x:Key="Item-DataTemplate" DataType="{x:Type local:Person}">
                <TextBlock x:Name="tb" Text="{Binding Name}" Margin="1" />
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding IsOnline}" Value="False">
                        <Setter TargetName="tb" Property="Foreground" Value="Red" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </Window.Resources>
        <StackPanel Orientation="Vertical">
            <Button Template="{StaticResource ImageButton-ControlTemplate}" Content="abcde"/>
            <Button x:Name="ddd" ContentTemplate="{StaticResource ImageButton-DataTemplate}" Content="{Binding APerson}"/>
            <ListBox x:Name="list1" ItemTemplate="{StaticResource Item-DataTemplate}" ItemsSource="{Binding Persons}"/>
        </StackPanel>
    </Window>

    这里补充点: 

    参考数据绑定思维,数据模板通过Content属性指定数据源,将数据先绑定到Content属性上,通过ContentTemplate指定数据处理方式。Button是数据content 对应的模板是ContentTemplate,Button是control对应的模板是Template。
    数据模板中设定属性,必须要使用指定TargetName,而控件模板不需要。
    数据模板中除了给ContentTemplate,例子中还可以设定给ItemsControl的ItemTemplate属性。除此以外还可以设定给GridViewColumn的CellTemplate属性。数据模板在页面xaml内部定义,而控件模板通常放到样式文件中。

     

    参考https://blog.csdn.net/jfyy/article/details/80743009

    展开全文
  • 来自:http://www.th7.cn/Program/WPF/2011/12/21/51676.shtml ControlTemplate用于描述控件本身. 使用TemplateBinding来绑定控件自身的属性, 比如{TemplateBinding Background}  DataTemplate用于描述控件的...
    来自:http://www.th7.cn/Program/WPF/2011/12/21/51676.shtml

    ControlTemplate用于描述控件本身. 使用TemplateBinding来绑定控件自身的属性, 比如{TemplateBinding Background}   DataTemplate用于描述控件的Content. 使用Binding来绑定数据对象的属性, 比如{Binding PersonName}   一般来说, ControlTemplate内有一个ContentPresenter, 这个ContentPresenter的ContentTemplate就是DataTemplate类型   Control类型   - Template属性 (ControlTemplate类型)   - ContentPresenter   - ContentTemplate (DataTemplate类型)   ContentControl类型   - Template属性 (ControlTemplate类型) 继承自Control   - ContentTemplate (DataTemplate类型)   ItemsControl类型   - Template属性 (ControlTemplate类型) 继承自Control   - ItemsPanel属性 (ItemsPanelTemplate类型) 指定布局容器   - ItemTemplate属性 (DateTemplate类型) 每个Item的Template <Style TargetType="Button"> <Setter Property="OverridesDefaultStyle" Value="True"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid> <Ellipse Fill="{TemplateBinding Background}"/> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>

    转载于:https://www.cnblogs.com/sjqq/p/6899573.html

    展开全文
  • 模板使用方式:首先定义模板,然后在把对应的key应用到控件对应的属性中; 属性对应: 控件模板,对应控件的Template; 数据模板,对应控件的...控件模板:如果控件的样式不能满足,可自定义控件模板来设...

    转载自:https://blog.csdn.net/ceasadan/article/details/61414879
    模板使用方式:首先定义模板,然后在把对应的key应用到控件对应的属性中;
    属性对应:
    控件模板,对应控件的Template;
    数据模板,对应控件的ItemTemplate属性;
    面板模板,对应控件的ItemsPanel属性。

    控件模板:如果控件的样式不能满足,可自定义控件模板来设计样式。
    数据模板:内容控件通过ContentTemplate属性支持数据模板;列表控件(即继承自ItemsControl类的控件),通过ItemTemplate属性支持数据模板,该模板用于显示由ItemSource提供集合中的每一项。
    面板模板:ItemsPanelTemplate用于指定项的布局。 ItemsControl 类型具有一个类型为ItemsPanelTemplate 的 ItemsPanel 属性。
    一、控件模板:如果控件的样式不能满足,可自定义控件模板来设计样式.
    在这里插入图片描述

        <Window.Resources>
            <ControlTemplate x:Key="roundBtnTemplte">
                <Grid>
                    <Ellipse Name="roundBtn" Width="100" Height="100" Fill="AliceBlue">
                        
                    </Ellipse>
                    <ContentPresenter Content="{TemplateBinding Button.Content}" VerticalAlignment="Center">
                        
                    </ContentPresenter>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter TargetName="roundBtn" Property="Fill" Value="Yellow">
                            
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Window.Resources>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="1*"></ColumnDefinition>
                <ColumnDefinition Width="1*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <StackPanel Margin="10" Grid.Column="0" Orientation="Horizontal">
                <Button Padding="5" Margin="5" Content="Round Button" Template="{StaticResource 
    roundBtnTemplte}"></Button>
                <Button Padding="5" Margin="5">nomal button</Button>
            </StackPanel>
        </Grid>
    

    2.数据模板:内容控件通过ContentTemplate属性支持数据模板;列表控件(即继承自ItemsControl类的控件),通过ItemTemplate属性支持数据模板,该模板用于显示由ItemSource提供集合中的每一项。

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <!--创建数据模板-->
            <HierarchicalDataTemplate  x:Key="NavDataTem" ItemsSource="{Binding Children}">
                <Border Name="myborder" BorderBrush="AliceBlue" BorderThickness="2" Margin="3">
                    <StackPanel Orientation="Horizontal" Margin="0,3">
                        <CheckBox IsChecked="{Binding IsChecked}" Content=""/>
                        <Image Source="{Binding Icon}" Width="16" Height="16"></Image>
                        <TextBlock Name="txtOne" Margin="5" FontWeight="Bold" Text="{Binding ItemName}" ></TextBlock>
                        <TextBlock Name="txtTwo"  Margin="5" Text="{Binding ItemProperty}" ></TextBlock>
                    </StackPanel>
                </Border>
                <HierarchicalDataTemplate.Triggers>
                    <Trigger SourceName="myborder" Property="IsMouseOver" Value="True">
                        <Setter TargetName="txtOne" Property="Background" Value="LightGray"></Setter>
                        <Setter TargetName="txtTwo" Property="FontSize" Value="20"></Setter>
                    </Trigger>
                </HierarchicalDataTemplate.Triggers>
            </HierarchicalDataTemplate>
           
        </Window.Resources>
        <StackPanel Margin="5">
     
            <TreeView Name="treeTest" ScrollViewer.VerticalScrollBarVisibility="Visible"  
                      ItemTemplate="{StaticResource NavDataTem}">
     
            </TreeView>
        </StackPanel>
    </Window>
    
     public class NavBarItem : INotifyPropertyChanged
        {
            public string ID { get { return Guid.NewGuid().ToString(); } }
            public string ItemName { get; set; }
            public string ItemProperty { get; set; }
            public List<NavBarItem> Children { get; set; }
            public NavBarItem()
            {
                Children = new List<NavBarItem>();
            }
     
            public event PropertyChangedEventHandler PropertyChanged;
            public void OnPropertyChanged(PropertyChangedEventArgs e)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, e);
            }
     
        }
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            List<NavBarItem> _NavBarItems = new List<NavBarItem>();
             List<NavBarItem> NavBarItems
             {
                 get { return _NavBarItems; }
                 set { _NavBarItems = value; }
     
             }
           
            public MainWindow()
            {
                
                
                InitializeComponent();
     
                treeTest.ItemsSource = NavBarItems;
                List<NavBarItem> childrenOne = new  List<NavBarItem>();
                childrenOne.Add(new NavBarItem()
                    {
                        ItemName = "C++",
                        ItemProperty = "C++语言"
                    });
                childrenOne.Add(new NavBarItem()
                {
                    ItemName = "C",
                    ItemProperty = "C语言"
                });
                childrenOne.Add(new NavBarItem()
                {
                    ItemName = "C#",
                    ItemProperty = "C#语言"
                });
                childrenOne.Add(new NavBarItem()
                {
                    ItemName = "Java",
                    ItemProperty = "Java语言"
                });
              
     
                List<NavBarItem> childrenTwo = new List<NavBarItem>();
                childrenTwo.Add(new NavBarItem()
                {
                    ItemName = "Windows",
                    ItemProperty = "微软"
                });
                childrenTwo.Add(new NavBarItem()
                {
                    ItemName = "Linux",
                    ItemProperty = "开源"
     
                });
                childrenTwo.Add(new NavBarItem()
                {
                    ItemName = "MacOS",
                    ItemProperty = "苹果"
                });
     
                NavBarItems.Add(new NavBarItem()
                {
                    ItemName = "编程语言",
                    Children = childrenOne
                });
                NavBarItems.Add(new NavBarItem()
                {
                    ItemName = "操作系统",
                    Children = childrenTwo
                });
            }
     
            
        }
    

    在这里插入图片描述
    说明:控件模板和数据模板的关系
    控件只是数据和行为的载体,至于它本身长什么样子和数据长什么样子都是靠Template决定的。决定控件外观的是ControlTemplate,决定数据外观的是DataTemplate,它们正是Control类的Template和ContentTemplate两个属性的值。
      一般来说,ControlTemplate内都有一个ContentPresenter,这个ContentPresenter的ContentTemplate就是DataTemplate类型。所以数据模板和控件模板的关系如下图所示:

    Control类型
    - Template属性 (ControlTemplate类型)
    - ContentPresenter
    - ContentTemplate (DataTemplate类型)

    ContentControl类型
    - Template属性 (ControlTemplate类型) 继承自Control
    - ContentTemplate (DataTemplate类型)

    ItemsControl类型
    - Template属性 (ControlTemplate类型) 继承自Control
    - ItemsPanel属性 (ItemsPanelTemplate类型) 指定布局容器
    - ItemTemplate属性 (DateTemplate类型) 每个Item的Template

    3.面板模板

    增加ItemsPanelTemplate调整面板布局
    在这里插入图片描述

        <Window.Resources>
            <!--创建数据模板-->
            <HierarchicalDataTemplate  x:Key="NavDataTem" ItemsSource="{Binding Children}">
                <Border Name="myborder" BorderBrush="AliceBlue" BorderThickness="2" Margin="3">
                    <StackPanel Orientation="Horizontal" Margin="0,3">
                        <CheckBox IsChecked="{Binding IsChecked}" Content=""/>
                        <Image Source="{Binding Icon}" Width="16" Height="16"></Image>
                        <TextBlock Name="txtOne" Margin="5" FontWeight="Bold" Text="{Binding ItemName}" ></TextBlock>
                        <TextBlock Name="txtTwo"  Margin="5" Text="{Binding ItemProperty}" ></TextBlock>
                    </StackPanel>
                </Border>
                <HierarchicalDataTemplate.Triggers>
                    <Trigger SourceName="myborder" Property="IsMouseOver" Value="True">
                        <Setter TargetName="txtOne" Property="Background" Value="LightGray"></Setter>
                        <Setter TargetName="txtTwo" Property="FontSize" Value="20"></Setter>
                    </Trigger>
                </HierarchicalDataTemplate.Triggers>
            </HierarchicalDataTemplate>
            <ItemsPanelTemplate x:Key="ItemsPanelTem">
                <StackPanel Orientation="Horizontal"
                        VerticalAlignment="Center"
                        HorizontalAlignment="Left"/>
            </ItemsPanelTemplate>
        </Window.Resources>
        <StackPanel Margin="5">
     
            <TreeView Name="treeTest" ScrollViewer.VerticalScrollBarVisibility="Visible"  
                      ItemTemplate="{StaticResource NavDataTem}" ItemsPanel="{StaticResource ItemsPanelTem}">
     
            </TreeView>
        </StackPanel>
    </Window>
    
    展开全文
  • https://blog.csdn.net/ceasadan/article/details/61414879 转载于:https://www.cnblogs.com/772933011qq/p/10696105.html
  • WPF控件模板

    2016-04-14 16:50:49
    wpf控件模板可以很方便高效的改变控件的外观
  • wpf控件模板工具

    2016-05-12 17:29:01
    wpf控件模板,标注控件模板工具,反编译微软windows各种风格
  • WPF控件模板浏览器

    2017-12-24 11:30:34
    可查看wpf控件模板的源xaml,方便重写控件样式。。。。。。。。。。。。。。。。。。。。。。。。。。
  • WPF中有控件模板和数据模板,控件模板可以让我们自定义控件的外观,而数据模板定义了数据的显示方式,也就是数据对象的可视结构,但是这里有一个问题需要考虑,数据是如何显示出来的?虽然数据模板定义了数据的可视...
  • WPF 控件模板

    2019-04-30 15:29:57
    扣扣技术交流群:460189483 引言:在进行WPF项目开发过程中,由于项目...WPF有控件模板和数据模板,从字面上来看,控件模板主要是用来改变控件的外观,数据模板则定义控件中数据的表现方式。下面让逐一进行介绍。 ...
  • wpf控件模板查看器

    2014-10-18 22:51:37
    可以查询常用的wpf控件模板,学习编程的好工具
  • WPF控件样式模板查询手册
  • 深入浅出WPF控件模板示例,控件模板的定义在应用程序全局App.xaml中
  • https://blog.csdn.net/ceasadan/article/details/61414879 转载于:https://www.cnblogs.com/KQNLL/p/9252827.html
  • 可用来查看WPF控件模板组成,利于了解控件默认模板的组成部分。
  • wpf控件模板

    2013-12-12 10:19:26
    wpf控件模板列表源代码 列出所有wpf控件及标准模板,供学习wpf模板的同学参考学习

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,721
精华内容 3,888
关键字:

wpf控件模板和数据模板