首页 > 其他分享 >WPF —— 控件模版和数据模版

WPF —— 控件模版和数据模版

时间:2024-03-19 17:33:41浏览次数:18  
标签:控件 Code Color 模版 list new WPF

1:控件模版简介:

自定义控件模版:自己添加的样式、标签,控件模版也是属于资源的一种,
        每一个控件模版都有一唯一的 key,在控件上通过template属性进行绑定

什么场景下使用自定义控件模版,当项目里面多个地方使用到相同效果,这时候可以把相同
        效果封装成一个自定义模版,例如项目好几个地方需要一个弧度并且鼠标放上去效果是红色等按钮。就可以
        把按钮从新自定义一下。

2:关于控件模版的实例

<Window.Resources>
    <!--自定义模版-->
    <ControlTemplate x:Key="c1" TargetType="Button" >
        <Border Background="AliceBlue"
                CornerRadius="5"
                BorderThickness="2"
                x:Name="border">
            <!--ContentPresenter 呈现内容的标签-->
            <StackPanel Orientation="Horizontal">
                <TextBlock VerticalAlignment="Center"
                           Margin="0,0,10,0"
                           Name="t1"
                           Text="☆"></TextBlock>
                <ContentPresenter HorizontalAlignment="Center"
                                  VerticalAlignment="Center">
                </ContentPresenter> 
            </StackPanel>
        </Border>
        <!--Triggers 设置触发 鼠标移去 鼠标移开等效果-->
        <ControlTemplate.Triggers>
            <!--Property 设置的属性
            Value 属性值-->
            <!--IsMouseOver 鼠标放上去
             TargetName="border" 目标元素的name属性
            -->
            <Trigger Property="IsMouseOver"
                     Value="true">
                <Setter Property="Background"
                        Value="red"
                        TargetName="border">

                </Setter>
                <Setter Property="BorderBrush"
                        Value="green"
                        TargetName="border">

                </Setter>
                <Setter Property="Text"
                        Value="★"
                        TargetName="t1">
                </Setter>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
</Window.Resources>

<Grid>
        <!--WPF不仅支持传统winfrom编程,并且还引入以模版为核心的新一代设计理念,在wpf通过使用模版
    将数据和界面进行解耦。模版主要分为俩大类型的模版:数据模版【DataTemplate】 和
    控件模版【Control Template】,
    控件模版:描述如何显示控件,
    数据模版:描述如何显示数据,-->
    
    <!--<Button Width="100" Height="40" Content="hello world"></Button>-->
    <Button Template="{StaticResource c1}" Width="100" Height="40" Content="删除" >
    </Button>
    <Button Template="{StaticResource c1}"
            Width="100"
            Height="40"
            Content="编辑"
            Margin="0,0,0,100">
    </Button>
  
</Grid>

效果图如下

 1关于数据模板的简介:

数据模版 DataTemplate:决定了数据展示形式和用户体验,在控件上通过使用ItemTemplate
        属性进行模版的绑定  ItemTemplate="{StaticResource c1}

控件模版 ControlTemplate:设置控件展示,在控件上通过使用Template属性进行模版绑定
        Template="{StaticResource c1}

2 关于它的实例

 <Window.Resources>
     <DataTemplate x:Key="c1">
         <StackPanel Orientation="Horizontal">
             <Border Width="10" Height="10"
                     Background="{Binding Code}">
             </Border>
             <TextBlock Text="{Binding Code}"> </TextBlock>
            
         </StackPanel>
     </DataTemplate>
 </Window.Resources>

 <Grid>
     <ListBox Width="200"
              Height="100"
              HorizontalAlignment="Left"
              VerticalAlignment="Top"
              ItemTemplate="{StaticResource c1}"
              Name="l1">

     </ListBox>
     <ComboBox Width="200"
               Height="40"
               ItemTemplate="{StaticResource c1}"
               Name="com"
               >
     </ComboBox>
     
     <!--这是之前的itemsource的写法-->
     <ListBox Width="200"
              Height="100"
              HorizontalAlignment="Left"
              VerticalAlignment="Top"
              ItemsSource="{Binding}"
              Margin="300,0,0,0"
              Name="l3">
         <ListBox.ItemTemplate>
             <DataTemplate>
                 <StackPanel Orientation="Horizontal">
                     <Border Width="10"
                             Height="10"
                             Background="{Binding Code}">
                     </Border>
                     <TextBlock Text="{Binding Code}"></TextBlock>
                 </StackPanel>
             </DataTemplate>
         </ListBox.ItemTemplate>
     </ListBox>
  
 </Grid>

定义模型类

    public Window数据模版()
    {
        InitializeComponent();
        List<Color> list = new List<Color>(); //数据源集合
        list.Add(new Color() { 
            Code = "#ff0000"
        });
        list.Add(new Color()
        {
            Code = "#00ff00"
        });
        list.Add(new Color()
        {
            Code = "#00FF00"
        });
        list.Add(new Color()
        {
            Code = "#55efc4"
        });
        list.Add(new Color()
        {
            Code = "#FBCA11"
        });
        this.l1.ItemsSource = list;
        this.com.ItemsSource = list;

        //之前的数据绑定的写法
        this.l3.ItemsSource = list;
       // this.l3.DisplayMemberPath = "Code";
     

    }
}

 // 模型类
public class Color
{
    public string Code {  get; set; }//颜色的取值#FF0000
}

标签:控件,Code,Color,模版,list,new,WPF
From: https://blog.csdn.net/lu2023_8_6/article/details/136848803

相关文章

  • 如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持
    ToolStripControlHost 旨在通过使用 ToolStripControlHost 构造函数或扩展 ToolStripControlHost 本身来启用任意Windows窗体控件的承载。通过扩展 ToolStripControlHost 并实现公开控件的常用属性和方法的属性和方法,可以更轻松地包装控件。还可以在 ToolStripControlHo......
  • [转][C#][WPF] 字体模糊的解决方法
    来源:通义灵码提问:WPF 字体模糊的解决方法回答:在C#WPF应用程序中,当改变窗体大小时出现字体模糊的问题,主要与WPF的渲染机制以及DPI缩放有关。以下是一些解决或改善字体模糊问题的方法:启用像素对齐呈现:对于UI元素,可以设置SnapsToDevicePixels属性为True以确保控件的内容尽可......
  • [转][C#][WPF] 复制 DataGrid 单元格内容时不带回车
    来源:通义灵码提问:WPFDataGrid复制不带回车回答:在WPF的DataGrid控件中,默认情况下,复制的内容通常会包括单元格之间的换行符,这意味着当你将DataGrid中的数据复制到其他地方时,每行数据都会在新位置以回车分隔。如果你希望在复制过程中不包含这些换行符,而是将所有数据连续地粘贴在......
  • XReport通过数据控制控件是否打印
    需求场景:医嘱单在患者出院的时候,需要标记一条红线,表示以下没有医嘱了。数据库中此记录的一个字段属性isRed值来标记这一行。 实现:XReport报表的明细区域增加一个line1对象。然后在明细表格带区添加如下事件代码,就可以实现这条线的可见打印输出通过数据集的属性控制了。priva......
  • element plus DateTimePicker控件选择日期不选时间,默认是0点,但是获取到的时间不一致
    只选择日期,未选择时间,应默认是0点 保存入库后时间变为16点 查看官方文档后,给控件设置这个属性即可value-format="YYYY-MM-DDHH:mm:ss" ......
  • GPT实战系列-LangChain的Prompt提示模版构建
    GPT实战系列-LangChain的Prompt提示模版构建LangChainGPT实战系列-LangChain如何构建基通义千问的多工具链GPT实战系列-构建多参数的自定义LangChain工具GPT实战系列-通过Basetool构建自定义LangChain工具方法GPT实战系列-一种构建LangChain自定义Tool工具的简单方法G......
  • MvvmLight中,两个依赖属性的值发生变化时影响第三个控件属性的用法
    使用数据绑定配合IValueConverter(值转换器)创建一个自定义转换器,该转换器接收两个输入值,并根据他们是否相等返回相应的输出值。然后将这个转换器应用到第三个控件的属性上1publicclassEqualityToTextConverter:IValueConverter2{3publicobjectConvert(o......
  • WPF —— TabControl、StackPanel 控件详解
    1TabControl简介表示包含多个项的控件,这些项共享屏幕上的同一空间。TabControl有助于最大程度地减少屏幕空间使用量,同时允许应用程序公开大量数据。 TabControl包含共享同一屏幕空间的多个TabItem对象。一次只能看到TabControl中的一个 TabItem。当用户选择的Tab......
  • WPF —— ListBox控件、GroupBox控件详解
    1、ListBox介绍  ListBox是一个ItemsControl,这意味着它可以包含任何类型的对象的集合(,例如字符串、图像或面板)。  一个ListBox中的多个项是可见的,与仅ComboBox具有所选项可见的项不同,除非IsDropDownOpen属性为true。该SelectionMode属性确定一次是否......
  • Vue+OpenLayers7入门到实战:OpenLayers7创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼
    返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战前言本章介绍如何使用OpenLayers7在地图上创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。二、依赖和使用"ol":"7.5.2"使用npm安装依赖[email protected]使用Y......