WPF and Silverlight 学习笔记(十二):WPF Panel内容模型、Decorator内容模型及其他...

由于园子里昨天使用Live Writer上传出现问题,昨天只能使用Web上的文本编辑器上传本文,造成代码、内容等格式的错误,现重发本文。

一、Panel内容模型

Panel内容模型指从System.Windows.Controls.Panel继承的控件,这些控件都是容器,可以在内部承载其他的控件和子容器。Panel内容模型包含的容器有:

  • Canvas

  • DockPanel

  • Grid

  • TabPanel

  • ToolBarOverflowPanel

  • UniformGrid

  • StackPanel

  • ToolBarPanel

  • VirtualizingPanel

  • VirtualizingStackPanel

  • WrapPanel

对于Panel模型,其包含一个Children属性,表示其所有的子控件和子容器的集合,在XAML代码中可以省略<XXX.Children>标记,如:

   1: <StackPanel x:Name="mainPanel">
   2:     <StackPanel x:Name="panelA">
   3:         <StackPanel.Children>
   4:             <Button>Button A</Button>
   5:         </StackPanel.Children>
   6:     </StackPanel>
   7:     <Button>Button B</Button>
   8:     <StackPanel x:Name="panelB">
   9:     </StackPanel>
  10: </StackPanel>

也可以通过代码,动态添加Children中的对象

   1: // 定义一个Button
   2: Button btn = new Button();
   3: btn.Content = "Button C";
   4:  
   5: // 将Button添加到StackPanel中
   6: panelB.Children.Add(btn);

二、Decorator内容模型

Decorator内容模型指的是从System.Windows.Controls.Decorator类继承的控件,主要是对其中的一个子元素的边缘进行修饰。Decorator模型的主要控件包含:

  • AdornerDecorator

  • Border

  • BulletDecorator

  • ButtonChrome

  • ClassicBorderDecorator

  • InkPresenter

  • ListBoxChrome

  • SystemDropShadowChrome

  • Viewbox

Decorator模型包含一个Child属性,表示其包含的一个子元素(注意,只能是一个子元素(控件或容器,在容器中可以再添加其他的控件)),Child属性的XAML标记可以省略。

例如,对于一个TextBox添加一个边框,使用XAML语言定义:

   1: <StackPanel x:Name="mainPanel">
   2:     <Border BorderThickness="5" BorderBrush="DarkBlue" Margin="5">
   3:         <Border.Child>
   4:             <TextBox Text="TextBox Content"/>
   5:         </Border.Child>
   6:     </Border>
   7: </StackPanel>

也可以使用代码完成上述功能:

   1: // 定义一个Border对象,并设置其边框的大小,颜色,外边距
   2: Border border = new Border();
   3: border.BorderThickness = new Thickness(5);
   4: border.BorderBrush = new SolidColorBrush(Colors.DarkRed);
   5: border.Margin = new Thickness(5);
   6:  
   7: // 定义一个TextBox对象
   8: TextBox textBox = new TextBox();
   9: textBox.Text = "TextBox Content Text";
  10:  
  11: // 使用Border修饰TextBox的边框
  12: border.Child = textBox;
  13:  
  14: // 将Border添加到StackPanel中
  15: mainPanel.Children.Add(border);

DecoratorContentModule

三、TextBlock模型

TextBlock模型实际上指的就是System.Windows.Controls.TextBlock类,它是一个用于显示少量流内容的轻量控件。其中包含一个InLines属性,支持 Inline 流内容元素的承载和显示。 支持的元素包括 AnchoredBlock、Bold(粗体字符串)、Hyperlink(超链接,在浏览器支持的模式下有效)、InlineUIContainer(承载其他控件的容器)、Italic(斜体字符串)、LineBreak(换行符)、Run(普通字符串)、Span(可以设置字体、颜色等的Span) 和 Underline(下划线)。

例如:

   1: <StackPanel Orientation="Horizontal">
   2:     <Border BorderThickness="2" Margin="5" BorderBrush="Black">
   3:         <TextBlock Margin="5" TextWrapping="WrapWithOverflow">
   4:             <TextBlock.Inlines>
   5:                 <Bold>
   6:                     <Run>BlockText 控件XAML示例</Run>
   7:                 </Bold>
   8:                 <LineBreak/>
   9:                 <Run>TextBlock支持以下的几种流显示样式:</Run>
  10:                 <LineBreak/>
  11:                 <Bold>粗体(Bold)</Bold>
  12:                 <LineBreak/>
  13:                 <Italic>斜体(Italic)</Italic>
  14:                 <LineBreak/>
  15:                 <Underline>下划线(Underline)</Underline>
  16:                 <LineBreak/>
  17:                 <Hyperlink NavigateUri="http://www.microsoft.com">超链接</Hyperlink>
  18:                 <LineBreak/>
  19:                 <Span Foreground="Red" FontSize="18">Span设置字体、颜色等</Span>
  20:                 <LineBreak />
  21:                 <InlineUIContainer>
  22:                     <StackPanel Background="AntiqueWhite" Margin="5">
  23:                         <TextBlock>Inline UI 容器</TextBlock>
  24:                         <Button Content="按钮" Width="80" />
  25:                     </StackPanel>
  26:                 </InlineUIContainer>
  27:             </TextBlock.Inlines>
  28:         </TextBlock>
  29:     </Border>
  30:     <Border BorderThickness="2" Margin="5" BorderBrush="Black">
  31:         <TextBlock Margin="5" TextWrapping="WrapWithOverflow" x:Name="textBlock">
  32:             <TextBlock.Inlines>
  33:                 <Bold>
  34:                     <Run x:Name="title"></Run>
  35:                 </Bold>
  36:                 <LineBreak x:Name="line"/>
  37:                 <InlineUIContainer x:Name="container">
  38:                     <StackPanel Background="AntiqueWhite" Margin="5" x:Name="panel">
  39:                     </StackPanel>
  40:                 </InlineUIContainer>
  41:             </TextBlock.Inlines>
  42:         </TextBlock>
  43:     </Border>
  44: </StackPanel>

使用代码操作Inlines:

   1: // 设置Inline对象的属性值
   2: title.Text = "TextBlock 控件代码示例";
   3:  
   4: // 添加Inline对象
   5: Run content = new Run("TextBlock支持以下的几种流显示样式:");
   6: Bold bold = new Bold(new Run("粗体"));
   7: Italic italic = new Italic(new Run("斜体"));
   8: Underline underline = new Underline(new Run("下划线"));
   9: Hyperlink hyperlink = new Hyperlink(new Run("超链接"));
  10: hyperlink.NavigateUri = new Uri("http://www.microsoft.com");
  11: Span span = new Span(new Run("Span设置字体、颜色等"));
  12: span.Foreground = new SolidColorBrush(Colors.Green);
  13: span.FontSize = 18;
  14:  
  15: textBlock.Inlines.InsertBefore(container, content);
  16: textBlock.Inlines.InsertBefore(container, new LineBreak());
  17: textBlock.Inlines.InsertBefore(container, bold);
  18: textBlock.Inlines.InsertBefore(container, new LineBreak());
  19: textBlock.Inlines.InsertBefore(container, italic);
  20: textBlock.Inlines.InsertBefore(container, new LineBreak());
  21: textBlock.Inlines.InsertBefore(container, underline);
  22: textBlock.Inlines.InsertBefore(container, new LineBreak());
  23: textBlock.Inlines.InsertBefore(container, hyperlink);
  24: textBlock.Inlines.InsertBefore(container, new LineBreak());
  25: textBlock.Inlines.InsertBefore(container, span);
  26: textBlock.Inlines.InsertBefore(container, new LineBreak());
  27:  
  28: // 设置InlineUIContainer的成员
  29: panel.Children.Add(new TextBlock(new Run("InlineUIContainer")));
  30: Button button = new Button();
  31: button.Content = "Button";
  32: button.Width = 80;
  33: panel.Children.Add(button);

执行结果:

TextBlock

四、TextBox模型

System.Windows.Controls.TextBox类,实现的是可编辑的文本框,文本框的内容由字符串类型的Text属性指定,并且整个TextBox的内容使用共同的(即TextBox指定的)样式。


下载本节的示例代码

本系列博客索引页

转载于:https://www.cnblogs.com/DragonInSea/archive/2009/04/16/1437211.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Source Insight 教程

From&#xff1a;http://www.cnblogs.com/ningskyer/articles/4038501.html 最经典的Source_Insight完整使用教程&#xff1a;https://wenku.baidu.com/view/6f7dbe87caaedd3382c4d3e4.html Source Insight 使用方法及技巧&#xff1a;https://wenku.baidu.com/view/ddd28da…

GIS最新热点以及未来发展热门

来源&#xff1a;测绘地信、知乎用户测绘小河马GIS是空间技术和信息技术的交叉学科&#xff0c;相关领域的研究热点都有可能成为GIS的发展趋势。GIS的技术环节无外乎数据获取、数据分析、数据呈现三个方面&#xff0c;从近年的发展情况看&#xff0c;GIS可能在这三个方面都有着…

Spring Data JPA 从入门到精通~查询结果的处理

参数选择&#xff08;Sort/Pageable&#xff09;分页和排序 特定类型的参数&#xff0c;Pageable 并动态 Sort 地将分页和排序应用于查询 案例&#xff1a;在查询方法中使用 Pageable、Slice 和 Sort。 Page<User> findByLastname(String lastname, Pageable pageable)…

用C#做短信CMPP2.0/3.0协议 支持扩展号支持物理网卡

此程序为中国移动CMPP协议程序接口&#xff0c;适合在中国移动申请了短信发送端口的公司使用。 短信群发已经成为现在软件系统、网络营销等必不可少的应用工具。可应用在短信验证、信息群发、游戏虚拟商品购买、事件提醒、送祝福等方面。 本程序功能包括&#xff1a; 1、支持Cm…

新算法可模拟人脑整体神经电路

来源&#xff1a;科学网 作者&#xff1a;陈超3月28日&#xff0c;日本理化学研究所日前宣布&#xff0c;他们的一个国际联合研究小组成功开发出模拟人脑整体神经电路的算法&#xff0c;可在下一代超级计算机上应用。新算法不仅节省内存&#xff0c;也能大幅提高现有超级计算机…

Java中的mapreduce没了_MapReduce的过程总结

MapReduce 分为&#xff1a;1) MapTask :1.Read阶段&#xff1a;逻辑切片 128M / Maptask 读数据解析出一个个key/value。2.Map阶段&#xff1a; 把key/value 写入到map中去(处理业务逻辑)3.Collect阶段&#xff1a;将生成的key/value分区(调用Partitioner)排序&#xff0c;并写…

酒桌上的规矩,社会的潜规则

(一)如果自己真不能喝&#xff0c;丫就别开第一口&#xff0c;端着饭碗夹了菜一边吃着去(二)如果确信自己要喝&#xff0c;就别装墨迹&#xff0c;接下来就是规矩了  规矩一&#xff1a;酒桌上虽然“感情深&#xff0c;一口闷&#xff1b;感情浅&#xff0c;舔一舔”但是喝酒…

7个方面读懂6月的5G标准

来源&#xff1a;5G丨公众号作为IMT2020主要的候选技术&#xff0c; 5GNR在3GPP的快马加鞭地统一协调下急速前行&#xff0c;按照计划&#xff0c;今年第一个5G标准会冻结&#xff0c;将为运营商提供一套5G初期部署的可行方案。5GNR 是5G New Radio的简称&#xff0c;是当今通信…

专家谈计算机体系架构研究获“图灵奖”

来源&#xff1a;科学网 作者&#xff1a;王佳雯 韩扬眉近日&#xff0c;有着“计算机界的诺贝尔奖”之称的“图灵奖”揭开面纱。国际计算机协会宣布&#xff0c;美国科学家约翰轩尼诗和大卫帕特森获得2017年度图灵奖&#xff0c;以表彰二人开创了一种系统的、可量化的方法用…

编译和使用APUE的源码

From&#xff1a;http://blog.csdn.net/mitesi/article/details/19015397 APUE说明及源码下载地址 &#xff1a;http://www.apuebook.com/ APUE 电子版 PDF 下载地址&#xff1a;http://download.csdn.net/download/freeking101/10012610 1. 介绍 总结&#xff1a;APUE是一本…

java标签用法详解_介绍一个javaWeb自定义标签的用法详解

这篇文章主要介绍了javaWeb自定义标签用法,结合实例形式分析了javaweb自定义标签的功能、定义方法及执行原理,需要的朋友可以参考下本文实例讲述了javaWeb自定义标签用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;自定义标签创建自定义标签主要用于移除Jsp页面中…

由partition看窗口函数

最近要完成一个项目&#xff0c;有一个查询可难住了笔者&#xff0c;无论是子查询还是分组&#xff0c;都没弄出来&#xff0c;还是基础知识不行啊。不过呢&#xff0c;可以查资料&#xff0c;最后用一个窗口函数解决了问题。由于开始的数据库是Access&#xff0c;后来笔者导成…

AI版「盗梦空间」?谷歌大脑「世界模型」可实现在其梦境中对智能体进行训练

图源&#xff1a;pixabay原文来源&#xff1a;arXiv原文链接&#xff1a;https://arxiv.org/pdf/1803.10122.pdf作者&#xff1a;David Ha、Jurgen Schmidhuber「雷克世界」编译&#xff1a;嗯~是阿童木呀、KABUDA我们探索构建通用强化学习环境中的生成式神经网络模型。我们的世…

Linux文件空洞与稀疏文件

From&#xff1a;http://www.topjishu.com/8277.html From&#xff1a;http://blog.csdn.net/clamercoder/article/details/38361815 Linux_File_Hole_And_Sparse_Files 参考unix环境高级编程第三版 54页和90页&#xff01;&#xff01;&#xff01; ( 文件I/O章节 lseek…

西人马聂泳忠:打造机器神经系统,成为中国的特斯拉

作者&#xff1a;于绍洋 来源&#xff1a;投资家网经常穿梭于几个城市&#xff0c;一手拉着行李箱&#xff0c;一手忙于回复工作上的事务&#xff0c;这可能已经成为西人马FATRI&#xff08;下称&#xff0c;西人马&#xff09;创始人聂泳忠博士的日常状态。他给人的第一印象…

Linux dd 命令

From&#xff1a;http://www.cnblogs.com/jikexianfeng/p/6103500.html Linux/UNIX: 使用 dd 命令创建 1GB 大小的二进制&#xff1a;http://www.linuxidc.com/Linux/2014-12/110147.htm 菜鸟教程 Linux dd命令&#xff1a;http://www.runoob.com/linux/linux-comm-dd.html …

Nature 首度揭示大脑传递信息的真正逻辑

我们对于大脑的理解还停留在极为初步的阶段&#xff08;图片来源&#xff1a;Pixabay&#xff09;来源&#xff1a;生物360摘要&#xff1a;我们过去对于大脑处理信息的理解&#xff0c;其实是非常片面和不准确的。今日&#xff0c;一项重量级的研究刊登在了最新一期的《自然》…

Linux 用户 和 用户组 管理 (添加、删除、修改)及说明

From&#xff1a;http://www.cnblogs.com/xd502djj/archive/2011/11/23/2260094.html 鸟哥官网 Linux 帐号管理与 ACL 权限设定&#xff1a;http://linux.vbird.org/linux_basic/0410accountmanager.php 鸟哥官网&#xff08;简体中文&#xff09;&#xff1a;http://cn.linux.…

IBM Watson将成为失败的投资?分析师眼里, IBM AI过度乐观, 夸大宣传

来源&#xff1a;36Kr 作者&#xff1a;石筱玉IBM Watson是在医疗领域最早布局的AI之一。在36Kr此前的盘点中&#xff0c;我们也知道Watson希望参与患者诊疗中的每一个步骤&#xff1a;导医用智能音箱、Watson诊断工具、住院看护辅助&#xff0c;还有病患心理疏导……Watson已…

linux 文件系统详解

From&#xff1a;http://soysauce93.blog.51cto.com/7589461/1715655 From&#xff1a;http://blog.csdn.net/new0801/article/details/63687127 Linux 的虚拟文件系统(强烈推荐)&#xff1a;http://blog.csdn.net/heikefangxian23/article/details/51579971 鸟哥 Linux 磁盘…