来自window Presentation Foundation Program Design的读书笔记 第五篇 上
我们将在本章讲解面板Stack和Wrap,首先我们来看下他们的继承结构:
1: UIElement
2: FrameworkElement
3: Panel(abstract)
4: Canvas
5: DockPanel
6: Grid
7: StackPanel
8: UniformGrid
9: WrapPanel
Panel定义了Children property,用来存储Child Element,Children property的类型是UIElementCollection
,也就是UIelement对象的collection,因此面板的对象可以是Image、Shape、TextBlock和Control以及其他的面板对象等。
我们看一段程序,改程序将在面板上建立10个按钮:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Windows;
6: using System.Windows.Controls;
7: using System.Windows.Data;
8: using System.Windows.Documents;
9: using System.Windows.Input;
10: using System.Windows.Media;
11: using System.Windows.Media.Imaging;
12: using System.Windows.Navigation;
13: using System.Windows.Shapes;
14:
15: namespace WPF_StackAndWrap
16: {
17: /// <summary>
18: /// MainWindow.xaml 的交互逻辑
19: /// </summary>
20: public partial class MainWindow : Window
21: {
22: public MainWindow()
23: {
24: InitializeComponent();
25: Loaded += WindowOnLoaded;
26: }
27:
28: private void WindowOnLoaded(object sender, RoutedEventArgs e)
29: {
30: TenButton();
31: }
32:
33: private void TenButton()
34: {
35: Title = "This is Stack";
36: StackPanel panel = new StackPanel();
37: Content = panel;
38:
39: Random rand = new Random();
40: for (int i = 0; i < 10; i++)
41: {
42: Button btn = new Button();
43: btn.Name = ((char)('A' + i)).ToString();
44: btn.Content = "Button " + btn.Name + " Click Me";
45: btn.FontSize += rand.Next(10);
46: panel.Children.Add(btn);
47:
48: btn.Click += (sender, e) =>
49: {
50: MessageBox.Show((sender as Button).Content.ToString());
51: };
52: }
53: }
54: }
55: }
当然,你可以给StackPanel加上背景色,确认StackPanel到底有多大:
1: panel.Background = Brushes.Aquamarine;
或者,改变子元素堆叠的方向,用Orientation property:
1: panel.Orientation = Orientation.Horizontal;
如果你需要选择一个元素,如果这个元素在XAML文件里进行了定义,那么你可以通过如下的方式获取:
1: object obj = FindName("Name");
这个方法调用的是window的FindName(),但是它会递归查询元素,当然,你还可以通过Children这个UIElementCollection元素来获取节点:
1: UIElement ele = panel.Children[0];
或者,如果el是panel的一个子节点,那么:
1: int index = panel.Children.IndexOf(el);
如果找到就返回相应的index,没有就返回-1;
除了在循环中绑定btn.Click事件意外,我们还可以通过以下方式来绑定事件:
1: AddHandler(Button.ClickEvent,new RoutedEventHandler(ButtonOnClick));
2:
3: private void ButtonOnClick(object sender, RoutedEventArgs e)
4: {
5: MessageBox.Show(((Button)e.Source).Name);
6: }
在这里需要注意,ButtonOnClick这个方法里的sender指向的是window,而e.Source属性指向的是事件的具体触发者。
如果你需要显示的内容太多,一屏幕显示不了的时候,你就需要一个滚动条了,在这里ScrollViewer类就可以帮助你完成这个需求,ScrollViewer类和window和ButtonBase类一样,同样继承自ContentControl,我们下面的例子,将创建50个按钮来演示ScrollViewer:
1: private void ScrollViewerTest()
2: {
3: ScrollViewer scroll = new ScrollViewer();
4: Content = scroll;
5:
6: StackPanel stack = new StackPanel();
7: scroll.Content = stack;
8: Random rand =new Random();
9:
10: for (int i = 0; i < 50; i++)
11: {
12: Button btn = new Button();
13: btn.Content = ((char)('A' + i)).ToString();
14: btn.FontSize += rand.Next(10);
15:
16: stack.Children.Add(btn);
17: }
18: }
你可以尝试着把scroll.VerticalScrollBarVisibility设置成为VerticalScrollBarVisibility.auto:
1: scroll.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
这样竖向的滚动条就会在需要的时候显示。
昨天接了个长电话,所以博文没有写完,今天一定补上。
转载于:https://www.cnblogs.com/freedoom/archive/2012/10/31/2747450.html
来自window Presentation Foundation Program Design的读书笔记 第五篇 上相关推荐
- 来自Window Presentation Foundation Program Design的读书笔记 (第四篇 上)
本篇讲解Button and Other Controls 在wpf中,控件一词比早期的window from更具有意义,在早期的windows from中,屏幕上的一切都是控件,但是在wpf中这个词 ...
- 来自window Presentation Foundation Program Design的读书笔记 第五篇下
我们来看下一个例子,这个例子将在一个button中放置一个stackpanel,然后在放置多个对象: 1: private void StackInButton() 2: { 3: Button bt ...
- 来自Window Presentation Foundation Program Design的读书笔记 (第四篇 下)
我们将一个tooltip控件绑定到button上,以便鼠标经过button时,可以显示提示信息, 1: private void ToolTipTest() 2: { 3: Button btn = ...
- Head First Design Pattern 读书笔记(4) 工厂模式
2019独角兽企业重金招聘Python工程师标准>>> Head First Design Pattern 读书笔记(4) Factory Pattern 工厂模式 ##Factor ...
- 《教练型管理者》读书笔记-第3篇 【教练流程】
<教练型管理者>读书笔记-第1篇 [教练原则] <教练型管理者>读书笔记-第2篇 [教练技能] 第3 篇 教练流程 教练定义:"教练是基于对话技术,赋能个人达成绩效目 ...
- 《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core 解决方案结构解析1
<ASP.NET Core In Action>读书笔记系列五 ASP.NET Core 解决方案结构解析1 参考文章: (1)<ASP.NET Core In Action> ...
- 《教练型管理者》读书笔记-第2篇 【教练技能】
<教练型管理者>读书笔记-第1篇 [教练原则] 第2 篇 教练技能 教练原则是通过教练的行为体现的.就像学习武功一样,心法虽然重要,但要落地就需要依靠扎实的基本功,这就是教练的核心技术. ...
- 《Python从入门到实践》读书笔记——第五章 if语句
<Python从入门到实践>读书笔记--第五章 if语句 1. 一个简单示例 cars = ['audi', 'bwm', 'subaru', 'toyota']for car in ca ...
- 读书笔记(五)--公司绝不会告诉你的50大秘密
读书笔记--第5篇--<公司绝不会告诉你的50大秘密> 0.法律解救不了您. 1.聪明过头并非明智之举. 2.年龄和性别歧视是活生生的现实. 3.公司并非畅所欲言的好地方. 4.如果你与老 ...
最新文章
- python错误提示“TabError: inconsistent use of tabs and spaces in indentation”
- 再见丑陋的 Swagger,这个API神器界面更炫酷,逼格更高,体验更好!
- 记2018年技术人一次短暂的创业
- centos6.8升级python3.5.2
- dblink查询_分库数据如何查询统计
- 编写python扩展模块_《深度剖析CPython解释器》27. 使用Python/C API编写扩展模块:编写扩展模块的整体流程...
- 知识蒸馏 | 知识回顾
- mysql默认dba_DBA 基本常识 - 安装完 MySQL 后必须调整的 10 项配置 - iTeknical
- masscan端口扫描
- 112家IT网络公司薪水一览表
- 如何生成SSH key以及免密设置
- unity2D笔记-控制人物相关
- 晓前端·周刊【第6期】:量子霸权
- html实现播放暂停,html如何实现播放和暂停
- RVN 一种新的聚类算法
- 入门使用-腾讯地图API
- Google Hacking 搜索教程,一步到位。
- 在VS 2019中使用HDF5的C API遍历HDF5数据集
- 【图像分割】基于方向谷形检测实现静脉纹路分割附MATLAB代码
- 隐形数字水印_Android 实现图片水印与隐形数字水印
热门文章
- 论文翻译与总结:Relational modeling for robust and efficient pulmonary lobe segmentation in CT scans
- linux alsa 录音程序,转 alsa录音放音执行流程详解
- PAT : 团体程序设计天梯赛-练习集L1 个人题解
- 赵大超的学习周志(八)
- 【板栗糖GIS】arcmap—修改右下角坐标单位为经纬度
- 百战RHCE(第七战:Linux进阶命令5-sudo提权极简管理)
- 【木桶规则】图像缩放到目标尺寸 Python
- 63、GIRAFFE: Representing Scenes as Compositional Generative Neural Feature Fields
- Cesium.knockout使用
- Credit Card Approval Predict w/ Towhee