当前位置: 首页 > article >正文

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
}


http://www.kler.cn/a/274767.html

相关文章:

  • EMMC , UFS, SSD介绍
  • HIPT论文阅读
  • Vue+element 回车查询页面刷新
  • 开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述
  • 多模态抽取图片信息的 Prompt
  • 告别机器人味:如何让ChatGPT写出有灵魂的内容
  • K8s的Pod出现Init:ImagePullBackOff问题的解决,(以calico网络插件为例)
  • 基于Lealfet.js展示Turf.js生成的平滑曲线实践
  • 详细教---用Django封装写好的模型
  • 如何本地部署1Panel面板
  • 【2024年5月备考新增】《软考真题分章练习 - 6 项目成本管理(高项)》
  • NLP---Bert分词
  • 除了大众点评,中国未来还会产生多少家这样的人工智能公司? - 学习Yelp公司的软件工程-评价和推荐系统
  • C++ 输入输出
  • 前端之各浏览器间差异和平台的兼容性问题
  • 计算机网络——协议层次及服务模型
  • 【0274】从shared init file或local init file加载relation cache(2 - 1)
  • JSONP 实现跨域请求案例
  • Python分析无人驾驶汽车在桂林市文旅行业推广的问卷
  • 00_coolprop_in_matlab在Matlab中使用CoolProp
  • 飞天使-k8s知识点26-kubernetes温故知新1-pod
  • 在idea中配置tomcat服务器,部署一个项目(下载教程加链接)
  • 【爬虫】实战-爬取Boss直聘信息数据
  • docker小白第十四天之Portainer与CIG
  • Go语言之函数、方法、接口
  • 数据在内存中的存储(C语言)(难点,需多刷几遍)