【万里征程——Windows App开发】控件大集合1

添加控件的方式有多种,大家更喜欢哪一种呢?
1)使用诸如 Blend for Visual Studio 或 Microsoft Visual Studio XAML 设计器的设计工具。
2)在 Visual Studio XAML 编辑器中将控件添加到 XAML 标记中。
3)在代码中添加控件。 当应用运行时会看到你在代码中添加的控件,但在 Visual Studio XAML 设计器中看不到。

前面我们已经用过了Grid、Button等控件,现在就来系统地看看关于控件的一些属性、事件等等。

毫无疑问第一步就是要来添加控件,那么添加控件有哪几种方式呢。前面我们都是直接在XAML中写的控件或者从工具箱中拖拽出来。其实还有2种,一种比较复杂但我们以后也会用到,那就是在C#后台代码中添加控件;还有一种就是在Blend for Visual Studio中拖拽控件了。后者的功能也非常强大,比如要使用动画之类的,这个设计器就能发挥作用了。

控件的属性相比大家都已经会用了,一来可以直接在XAML中添加属性,二来可以在属性视图中添加和修改属性。

这里写图片描述

如果要添加和修改事件呢,同样在属性视图中,点击右上角的闪电图标即可。如果要添加Click事件,那么在Click的输入框中输入好事件名称后直接按Enter即可。此时VS就会自动跳转到C#后台代码中,第一个参数sender是对处理程序所附加的对象的应用,第二参数是事件数据,它通常在签名中显示为e参数。

private void btnSetStyle_Click(object sender, RoutedEventArgs e)
{Button b = (Button)sender;b.Height = 400;b.Width = 320;
}

上面的这段代码这会将所点击的Button的高设置为400,宽设置为320;除了这种方式外,也可以按如下操作,其中btnSetStyle是当前Button的名字:

private void btnSetStyle_Click(object sender, RoutedEventArgs e)
{btnSetStyle.Height = 400;btnSetStyle.Width = 320;
}

除此之外,我们也可以不在XAML中定义Click事件,按照如下操作也可以达到相同的效果,它会将两个事件相互关联。

public MainPage()
{this.InitializeComponent();btnSetStyle.Click += new RoutedEventHandler(btnSetStyle_Click);
}private void btnSetStyle_Click(object sender, RoutedEventArgs e)
{btnSetStyle.Height = 400;btnSetStyle.Width = 320;
}

前面我们已经了解了如果添加控件、添加/修改属性、添加/修改事件。也了解一下控件的样式,虽然说到样式大家想到的可能是css。想必大家都玩过2048吧,游戏中有许多许多的方格,那么这些方格的样式会不会一个一个去定义呢,当然不是啦,可以直接用样式资源来定位到所有的Button。后面我们也会来实践一下如何写一个2048小游戏的。

以下是我写的2048里面的样式啦,

<Page.Resources><Style TargetType="Button"><Setter Property="FontWeight" Value="Bold"/><Setter Property="FontSize" Value="40"/><Setter Property="HorizontalAlignment" Value="Center"></Setter><Setter Property="VerticalAlignment" Value="Center"></Setter><Setter Property="Background" Value="Gray"></Setter><Setter Property="Width" Value="100"></Setter><Setter Property="Height" Value="100"></Setter><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Grid x:Name="Grid" Background="Transparent"><Border x:Name="Border" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Background="{TemplateBinding Background}" ><ContentPresenter x:Name="ContentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="Center"  VerticalAlignment="Center"/></Border></Grid></ControlTemplate></Setter.Value></Setter></Style>
</Page.Resources>

但是这里也有一个问题,如果我们有10个Button控件,却只想其中8个用到这些定义,另外2个想用另一种控件,那该怎么办呢?

将样式定义为资源,其实是有2中方式的。
一种就是直接用Style的TargetType属性来定义到所有的目标控件。
另一种则除了用TargetType属性外,还可以用x:key属性,然后再具体的控件中庸显式的关键字StaticResource来设置具体的Style属性。

<Page.Resources>     <Style TargetType="Button">              <Setter Property="FontStyle" Value="Oblique" /><Setter Property="FontSize" Value="20" /><Setter Property="BorderBrush" Value="Green" /><Setter Property="BorderThickness" Value="5" /><Setter Property="Foreground" Value="Orange" /><Setter Property="Height" Value="80"/><Setter Property="Width" Value="160"/></Style><Style x:Key="OtherStyle" TargetType="Button"><Setter Property="FontStyle" Value="Italic" /><Setter Property="FontSize" Value="16" /><Setter Property="Foreground" Value="Lavender" /><Setter Property="Height" Value="160"/><Setter Property="Width" Value="320"/><Setter Property="Opacity" Value="0.2"/></Style>                                                            
</Page.Resources>

具体效果见下图,其中Opacity属性为透明度。

这里写图片描述

大家都知道类可以继承,样式也是可以继承的。

虽然这篇博客内容比较少,但更精彩的内容还在后面呢。感谢大家的支持!



感谢您的访问,希望对您有所帮助。

欢迎大家关注或收藏、评论或点赞。


为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

转载于:https://www.cnblogs.com/NoMasp/p/4786049.html

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

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

相关文章

Java Collections BinarySearch()方法与示例

集合类binarySearch()方法 (Collections Class binarySearch() method) Syntax: 句法&#xff1a; public static int binarySearch(List l, Type key_ele);public static int binarySearch(List l, Type key_ele, Comparator com);binarySearch() method is available in jav…

从String中移除空白字符的多种方式!?差别竟然这么大!

字符串&#xff0c;是Java中最常用的一个数据类型了。我们在日常开发时候会经常使用字符串做很多的操作。比如字符串的拼接、截断、替换等。这一篇文章&#xff0c;我们介绍一个比较常见又容易被忽略的一个操作&#xff0c;那就是移除字符串中的空格。其实&#xff0c;在Java中…

[JS][jQuery]清空元素html()、innerHTML= 与 empty()的区别 、remove()区别

清空元素html("")、innerHTML"" 与 empty()的区别 一、清空元素的区别 1、错误做法一&#xff1a; $("#test").html("");//该做法会导致内存泄露 2、错误做法二&#xff1a;$("#test")[0].innerHTML"&qu…

Properties文件位置

这种情况下Properties文件放在和‘当前类’同一目录下 <span style"font-size:14px;">Properties p new Properties(); InputStream in 当前类.class.getResourceAsStream("Properties文件名"); p.load(in); </span> 这种情况下Prop…

Java类class isAnnotation()方法及示例

类的类isAnnotation()方法 (Class class isAnnotation() method) isAnnotation() method is available in java.lang package. isAnnotation()方法在java.lang包中可用。 isAnnotation() method is used to check whether this Class object represents the annotation type or…

不要再用main方法测试代码性能了,用这款JDK自带工具

前言作为软件开发人员&#xff0c;我们通常会写一些测试程序用来对比不同算法、不同工具的性能问题。而最常见的做法是写一个main方法&#xff0c;构造模拟场景进行并发测试。如果细心的朋友可能已经发现&#xff0c;每次测试结果误差很大&#xff0c;有时候测试出的结果甚至与…

读书总结:周鸿祎,我的互联网方法论

目录&#xff1a;1、欢迎来到互联网时代2、互联网用户至上3、颠覆式创新4、免费时代5、体验为王6、互联网方法论第一章&#xff1a;互联网时代1、没人能打败趋势&#xff0c;趋势会导致非线性发展。2、信息的流通变快&#xff0c;商家很难利用非对称性赚钱。3、用户的体验最重要…

Java ClassLoader getResources()方法与示例

ClassLoader类的getResources()方法 (ClassLoader Class getResources() method) getResources() method is available in java.lang package. getResources()方法在java.lang包中可用。 getResources() method is used to identify all the resources with the given resource…

Java中Properties类的操作

http://www.cnblogs.com/bakari/p/3562244.html Java中Properties类的操作 知识学而不用&#xff0c;就等于没用&#xff0c;到真正用到的时候还得重新再学。最近在看几款开源模拟器的源码&#xff0c;里面涉及到了很多关于Properties类的引用&#xff0c;由于Java已经好久没用…

复盘线上的一次OOM和性能优化!

来源&#xff1a;r6d.cn/ZazN上周五&#xff0c;发布前一周的服务器小动荡????事情回顾上周五&#xff0c;通过Grafana监控&#xff0c;线上环境突然出现CPU和内存飙升的情况&#xff1a;但是看到网络输入和输入流量都不是很高&#xff0c;所以网站被别人攻击的概率不高&am…

scanf 输入十六进制_在C语言中使用scanf()输入一个十六进制值

scanf 输入十六进制Here, we have to declare an unsigned int variable and input a value in hexadecimal format. 在这里&#xff0c;我们必须声明一个无符号的int变量&#xff0c;并以十六进制格式输入一个值。 To input a value in hexadecimal format – we use "%…

阅读源码的 4 个绝技,我必须分享给你!

为什么要阅读源码&#xff1f;1.在通用型基础技术中提高技术能力在 JAVA 领域中包含 JAVA 集合、Java并发(JUC)等&#xff0c; 它们是项目中使用的高频技术&#xff0c;在各种复杂的场景中选用合适的数据结构、线程并发模型&#xff0c;合理控制锁粒度等都能显著提高应用程序的…

微信公众号开发 ssl connect error

微信获取公众号授权失败 &#xff1a;ssl connect error 本人用的是微擎&#xff0c;也是刚入手&#xff0c;碰到这个问题感觉很棘手。 通过一步步调试发现问题出在curl 认证这里&#xff0c;得到结果错误代码&#xff1a;35&#xff0c;错误信息就是&#xff1a;ssl connect …

struts2的java.lang.NoSuchMethodException异常处理

不久前在学习struts时出现这个错误&#xff0c;在网上搜索了半天&#xff0c;发现答案不一。将其总结如下&#xff0c;以方便大家参考。 1、 你有没有试试看 其它的方法能不能用&#xff0c;要是都是这种情况的话&#xff0c;可能是你的Action类没有继承structs里面的DispatchA…

Java String indexOf(int ch)方法与示例

字符串indexOf(int ch)方法 (String indexOf(int ch) Method) indexOf(int ch) is a String method in Java and it is used to get the index of a specified character in the string. indexOf(int ch)是Java中的String方法&#xff0c;用于获取字符串中指定字符的索引。 If…

innerHTML、innerText和outerHTML、outerText的区别

1、区别描述如下&#xff1a; innerHTML 设置或获取位于对象起始和结束标签内的 HTMLouterHTML 设置或获取对象及其内容的 HTML 形式innerText 设置或获取位于对象起始和结束标签内的文本outerText 设置(包括标签)或获取(不包括标签)对象的文本innerText和outerText在获取时是相…

Socket粘包问题终极解决方案—Netty版(2W字)!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;上一篇我们写了《Socket粘包问题的3种解决方案》&#xff0c;但没想到评论区竟然炸了。介于大家的热情讨论&#xff0c;以及…

Java高质量代码之 — 泛型与反射

在Java5后推出了泛型,使我们在编译期间操作集合或类时更加的安全,更方便代码的阅读,而让身为编译性语言的Java提供动态性的反射技术,更是在框架开发中大行其道,从而让Java活起来,下面看一下在使用泛型和反射需要注意和了解的事情 1.Java的泛型是类型擦除的 Java中的泛型是…

Java LocalDate类| isLeapYear()方法与示例

LocalDate类isLeapYear()方法 (LocalDate Class isLeapYear() method) isLeapYear() method is available in java.time package. isLeapYear()方法在java.time包中可用。 isLeapYear() method is used to check whether the year field value is a leap year or not based on …

Redis 消息队列的三种方案(List、Streams、Pub/Sub)

现如今的互联网应用大都是采用 分布式系统架构 设计的&#xff0c;所以 消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段&#xff0c;它具有 低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。当前使用较多的 消息队列 有 RabbitMQ、RocketMQ、ActiveMQ、K…