WPF-控件简介

                控件:能与用户交互的元素

                所有控件都继承自System.Windows.Control类,所以都具备以下几种能力

                        设置控件内容对齐方式

                        设置Tab键顺序

                        支持绘制背景、前景和边框

                        支持格式化文本内容的尺寸和字体

有哪些控件?

                内容控件:可包含嵌套元素,提供近乎无限的显示能力。Label、Button、ToolTip、ScrollViewer

                带标题的内容控件:TabItem、GroupBox、Expander

                文本控件:Textbox、PasswordBox、RichTextBox

                列表控件:ListBox、ComboBox

                基于范围的控件:Slider、ProgressBar

                日期控件:Calendar、DatePicker

                还有一些负责菜单、工具栏、功能区、网格、树、富文档等功能的控件

背景画刷和前景画刷

                Background背景画刷:控件边框内部颜色。

                Foreground前景画刷:控件内部文本颜色。

                

                Brush对象可接收单一颜色画刷SolidColorBrush、渐变色画刷LinearGradientBrush、磁贴画刷TileBrush

                C#设置颜色
            //用代码设置背景颜色 前景颜色同理	
            test_btn.Background = new SolidColorBrush(Colors.AliceBlue);	
            //跟随系统控件颜色	
            test_btn.Background = new SolidColorBrush(SystemColors.ControlColor);	
            //存在已经被预定义的系统控件颜色画刷	
            test_btn.Background = SystemColors.ControlBrush;	
            //设置前景颜色 即文本颜色  通过R G B值设置颜色,也可通过R G B A设置颜色 Color.FromArgb	
            int red = 0;	
            int green = 255;	
            int blue = 0;	
            test_btn.Foreground = new SolidColorBrush(Color.FromRgb((byte)red, (byte)green, (byte)blue));	
                XAML设置颜色
            <!--方式一-->	
            <Button Background="AliceBlue"/>	
            <!--方式二-->	
            <Button>	
                <Button.Background>	
                    <SolidColorBrush Color="AliceBlue"/>	
                </Button.Background>	
            </Button>	
            <!--方式三-->	
            <Button Background="#FFFF0000"/>	

                画刷还可以设置边框颜色等属性,如BorderBrush

                当然不同的控件拥有的能接受画刷对象的属性就有所不同,具体还得看控件的内部定义。

字体

                Control类中定义了一些字体有关的属性

                        FontFamily、FontSize、FontStyle、FontWeight、FontStretch

<Button Content="ABC" FontFamily="Times New Roman" FontWeight="Bold" FontSize="16"/>

                文本装饰和排版

                        TextDecorations和Typography属性

<TextBlock Text="123" TextDecorations="Baseline" Typography.CapitalSpacing="True"/>

                字体继承

                        和其他属性一样,存在属性继承,会流经嵌套对象。

                字体替换

                        用逗号分隔,将备选字体加在后面,前面的找不到就会往后找。

                        FontFamily="Times New Roman, Technical Italic"

                        可以循环Fonts.SystemFontFamilies集合,获取当前计算机已安装的所有字体。

                字体嵌入

                        处理不常见的字体,向应用程序添加.ttf字体文件,并引用使用。

<TextBlock FontFamily="./#Bayern"/>

                文本格式化模式

                        WPF文本渲染有个缺点:文本尺寸较小时会变得模糊。

<TextBlock TextOptions.TextFormattingMode="Display"/>

                        仅对于96dpi的显示器上,小于15的文本设置TextOptions.TextFormattingMode="Display",可以改善显示效果

鼠标光标

                通过System.Windows.Input.Cursor对象来调整需要显示不同状态情况的鼠标光标。

                存在沙漏光标、手状光标、箭头光标等以及自定义样式的光标

                XAML设置光标
<TextBlock x:Name="test_tb" Cursor="Arrow"/>
                C#设置光标
test_tb.Cursor = Cursors.Wait;

                使应用程序下每个窗口的每个元素都同时生效某种光标设置

                        Mouse.OverrideCursor = Cursors.Wait;

                        此方式将覆盖每个元素的Cursor设置

                        移除覆盖Mouse.OverrideCursor = null;

                使用ForceCursor="True",可以使父元素覆盖子元素的光标设置

                自定义光标样式,Cursor类有两个重载构造方法,用于实例化自定义光标对象。

内容控件

                可以包含单个嵌套元素的控件,例如Window,所以Window通常都将内容封装到一个Grid类型的顶级容器中。

                都继承自ContentControl类

                Content属性有两种处理方式:

                        非UIElement子类对象,调用ToString(),然后显示文本。

                        UIElement子类对象,调用UIElement.OnRender(),将对象显示在内容控件中。

                以Button用法举例

 <!--用法1-->
 <Button Content="确认"/>
 <!--用法2-->
 <Button>
     <Image Source="test.png"/>
 </Button>
 <!--用法3-->
 <Button>
     <StackPanel Orientation="Horizontal">
         <TextBlock Text="测试"/>
         <Image Source="test.png"/>
     </StackPanel>
 </Button>

                 另外还可以使用ContentTemplate模版进行更高级智能化的表现。

                还有布尔类型的HasContent属性,用来判断是否有内容。

                内部布局设置

                        对齐属性,包括HorizontalContentAlignment、VerticalContentAlignment、Padding

                        这些属性都是定义在Control类中的,所有控件都有这些属性。

                Label标签

                        支持记忆符

        <Label Content="_A" Target="{Binding ElementName=txtA}"/>
        <TextBox x:Name="txtA"/>
        <Label Content="_B" Target="{Binding ElementName=txtB}"/>
        <TextBox x:Name="txtB"/>

                        效果描述:这里识别Alt+A,会使第一个Label的Content变为A,并且焦点聚焦到txtA控件上。Alt+B亦复如是。

                按钮

                        Button、CheckBox、RadioButton都是继承自ButtonBase类的按钮控件,同时也是内容控件。

                        Click事件和对命令的支持,都是源于ButtonBase中的定义。

                        ButtonBase中还有决定何时引发Click事件的属性ClickMode,默认值是ClickMode.Release,即释放鼠标时引发事件。

                        ClickMode还有另外两个触发模式,ClickMode.Press按下触发和ClickMode.Hover悬停触发。

                        Button的两个可写属性   

                                IsCancel:如果设置为True时,在当前窗口的任何位置按下Esc都会出发该按钮

                                IsDefault:设置为True时按钮就成为了默认按钮。

                        有一个名为IsDefaulted的只读属性,猜测本意是用来判断是否为默认按钮,需谨慎使用,有的情况下其值的呈现结果可能会让人困惑。

                        ToggleButton

                                开关按钮,拥有三个状态,true、false、null,是CheckBox和RadioButton的父类。

                                其效果有时称为-黏贴单击(sticky click)

                                null值状态的设定:<ToggleButton IsChecked="{x:Null}"/>

                                属性IsThreeState,用于控制在点击时是否包含null值状态的循环切换。

                                还有三个特定状态触发事件:Checked、UnChecked、Indeterminate

                        RepeatButton

                                多次触发按钮,可用于构建ScrollBar。

                        CheckBox

                                除了样式,其他都同于其父类ToggleButton

                        RadioButton

                                继承自ToggleButton。

                                相较于父类,增加了GroupName属性,用于限制在同组名内只有一个RadioButton的值为True,实现单选功能。

                工具提示

                        ToolTip:作为内容控件,可以使文本内容,也可以是复杂的嵌套内容,但是其显示内容内不可交互。

                        Popup:在许多方面与ToolTip相同,但不会自动显示,而且内容可以交互。

特殊容器

        ScrollViewer

                特点:滚动

                通过属性可控制滚动条的显示与隐藏,例如VeticalScrollBarVisiblility等

                可以通过代码控制滚动,有相应的方法,例如:LineUp()、PageUp()、ScrollToEnd()等一系列方法

                可以自定义滚动,其核心是因为IScrollInfo接口类的支持。

                CanContentScroll属性为True的时候,每次单击将会滚动到下一个元素的开头。

        GroupBox

                具有标题和圆角的方框

        TabItem

                是分页控件TabControl的子级,代表其中某一页。

        Expender

                扩展器,用来折叠内容,整理页面的控件

文本控件

        Textbox

                可通过属性设置是否进行拼写检查SellCheck.IsEnabled

                可限制字数

        PasswordBox

                通过显示圆圈符号字符串来遮蔽实际输入字符,密码文本的输入

        RichTextBox

                用于显示FlowDocument对象的高级控件

列表控件

        ListBox

                让用户从长度可变的列表中选择一项或多项

        ComboBox

                与ListBox功能一致,但呈现方式为下拉列表

基于范围的控件

        Slider--滑动条 ProcessBar--进度条

日期控件

        Calendar--日历 DatePicker--日期选择器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值