首页 > 其他分享 >【WPF学习】03 控件模板

【WPF学习】03 控件模板

时间:2023-04-23 09:56:42浏览次数:45  
标签:控件 03 样式 ContentPresenter Content 设置 WPF 属性

查看控件样式具体属性

在VirtualStudio中,我们可以通过文档大纲找到具体元素控件,右键选择“编辑模板--编辑副本”可以查看该控件当前的样式具体属性设置,再未对控件自定义样式的时候通过这种方法查看到的即为系统为该控件预设的样式属性

由此再注释几个属性:

ContentPresenter  定义控件呈现的内容(究其根本是所有的空间都是通过继承ContentControl类来通过其中的ContentPresenter来设置各自的Content,Content的数据类型是Object类型)

因为Content数据类型的缘故,允许我们设置比较复杂的Content样式,除了通过前面提到的<Button Content="Button1"/>这种形式设置简单Content外,可以通过下列嵌套方式进行复杂Content设置:

<Button>

  <Button.Content>

    <StackPanel Orientation="Horizontal"> <!-- 这里设置所有的Content内容按水平方向排列 -->

      <Button Content="Button1"/>

      <Button Content="Button2"/>

      <Button Content="Button3"/>

      <TextBlock Text="TextBlock1">

    </StackPanel>

  </Button.Content>

</Button>

相比较前面的简单设置,这里的ButtonContent不仅包含了三个子Button内容还有一个TextBlock内容,这一效果的成功呈现归功于ContentPresenter

如果将ContentPresenter部分移除,则无法通过上面的StackPanel嵌套结构设置复杂形式的Content,

但这也不代表就完全设置不了Content了,如果只是一个简单的文本信息Content,可以先在原本ContentPresenter的位置通过<TextBlock Text="{TemplateBinding Button.Content}"/>将TextBlock和后面的Button的Content属性内容进行绑定,然后再去后面设置<Button Content="Button1"/>即可重新呈现这种比较简单的ButtonContent,这种简单Content在ContentPresenter缺失的情况下能通过TextBlock进行替代的原因是虽然没有了ContentPresenter提供的对Object类型的呈现,但此时的Content仍支持对String这种基本数据类型的呈现

由此我们也了解了TemplateBinding的功能,我们是通过这个方法将样板中的样式名和控件的样式属性进行绑定,如果没有在样板中声明绑定关系,则后面控件对应的样式属性也无法正常呈现

同时,被绑定的样式属性显然应该是当前空间已有的属性(没有的属性谈何绑定)

运行窗口程序后,在VS提供的实时可视化树中我们可以更为清晰的了解当前窗口的层次结构(实时可视化树所属工具栏在“调试--选项--调试--热重载--WPF和UMP--启用应用内工具栏”可以设置是否启用)

归根到底ControlTemplate直接控制的是一个控件模板,除了像上面那样在Border中设置样板属性外,同样可以在ControlTemplate内部添加Grid嵌套进行对该模板进行一个布局设置(多多尝试不同标签之间的搭配能更深入准确地了解WPF)

<ControlTemplate TargetType="x:Type Button">

  <Grid>  <!-- 这里通过添加一个Grid将原本的模板样式由默认的单行布局改为两行布局 -->

    <Grid.RowDefinitions>

      <RowDefinition/>

      <RowDefinition/>

    </Grid.RowDefinitions>

  </Grid>

  <Border>

    <ContentPresenter>

    </ContentPresenter>

  </Border>

</ControlTemplate>

标签:控件,03,样式,ContentPresenter,Content,设置,WPF,属性
From: https://www.cnblogs.com/90Red/p/17339435.html

相关文章

  • ICS TRIPLEX 工业模块 T8403
    W;1 ⑧ 0 ③0① ⑦ 7 7⑤9ICSTRIPLEX工业模块T8403 TC-505-02-4M5 发电系统的发电机组控制伍德沃德为发电机组市场提供范围广泛的控制器。我们努力降低总安装/运营成本和调试时间,同时提高可用性、效率、可靠性和寿命。T8403 T8403 T8461 T8461C T8403 ......
  • 解决vue2.0路由 TypeError: Cannot read property 'matched' of undefined 的错误问题
      找了很久这个问题 解决vue2.0路由TypeError:Cannotreadproperty'matched'ofundefined的错误问题-北桥苏-博客园(cnblogs.com)  解决办法改为   问题解决  没有找到为什么 好像高版本的router没有这个问题 我因为需要降级到了3.1.3 ......
  • 算法学习day03链表part01-203、707、206--待办
    //这块需求重新进行学习packageLeetCode.linkedlistpart01;publicclassListNode{//结点的值intval;//下一个结点ListNodenext;//节点的构造函数(无参)publicListNode(){}//节点的构造函数(有一个参数)publicLis......
  • Loading class `com.mysql.jdbc.Driver'. 问题
     解决Loadingclass`com.mysql.jdbc.Driver'.Thisisdeprecated.Thenewdriverclassis`com.mysql.cj.jdbc.Driver'.ThedriverisautomaticallyregisteredviatheSPIandmanualloadingofthedriverclassisgenerallyunnecessary.警告问题错误提示:Loadi......
  • 高级控件
    title:ContentProvider下拉框SpinnerpublicclassSpinnerDropdownActivityextendsAppCompatActivityimplementsAdapterView.OnItemSelectedListener{//定义下拉列表需要显示的文本数组privatefinalstaticString[]starArray={"水星","金星","......
  • sql语法错误[1093] You can't specify target table 'score' for update in FROM clau
    不能在同一张表中将查询非结果集作为更新条件执行将需要的结果集外层套一层自查询如updateaseta.num=a.num+1wherea.namein(selecta.agefromawherexx=xxx);报错[1093]Youcan'tspecifytargettable'score'forupdateinFROMclauseupdateaseta......
  • 03:基础入门-搭建安全拓展
    1、涉及的知识点常见的问题#ASP,PHP,ASPx,JSP,PY,JAVAWEB等环境#WEB源码中敏感文件后台路径,数据库配置文件,备份文件等#ip或域名解析wEB源码目录对应下的存在的安全问题域名访问,IP访问(结合类似备份文件目录)#脚本后缀对应解析(其他格式可相同-上传安全)#存在下载或为解......
  • 装了.Net 7.0后,工程框架用 net6 的 dotnet watch 出错临时解决方案 Could not load fi
    升级vs或者装了.Net7.0后,工程框架用net6的dotnetwatch出错‘Unhandledexception.System.IO.FileNotFoundException:Couldnotloadfileorassembly‘System.Runtime,Version=7.0.0.0’   临时解决方案:工程目录下建立global.json文件指定编译框架{"......
  • 剑指Offer——03.数组中重复的数字(c语言)
    title:剑指Offer03.数组中重复的数字(c语言)找出数组中重复的数字。在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例1:输入:[2,3,1,0,2,......
  • toga的多媒体控件
    Toga提供了多种多媒体控件,如图像控件、视频控件、音频控件等,可以用于创建跨平台的GUI应用程序。这些控件可以用来显示和播放各种类型的媒体内容。下面是一些常用的多媒体控件的简单介绍和使用方法:图像控件-toga.Imagetoga.Image用于创建一个图像控件,用于显示静态图像。常用参......