<Button FontFamily="Arial,Comic Sans MS,Technical Italic">A Button</Button>
使用System.Windows.Media.Fonts类的静态集合SystemFontFamilies集合,可以获得在当前计算机上已安装的所有字体的列表。
字体嵌入
处理不常见字体的另一种选择是在应用程序中嵌入字体,通过嵌入字体,应用程序就永远不会出现查找希望使用的字体问题。嵌入过程为:首先向应用程序添加字体文件,然后在VS中将此文件属性中的生成操作设置为Resource。接下来,在使用字体时,需要在字体家族名称之前添加字符序列”./# “,它表示当前文件夹。如:
<Label FontFamily="./#草檀斋mozedong字体" FontSize="20" >草船借箭</Label> --被和谐字体
WPF的文本渲染
当使用比较小(小于15点的文本)的字体时,WPF文本渲染会使文本变得模糊,为了解决此问题,WPF增加了TextOptions.TextFormattingMode附加属性,并且将其设置为Display,默认值为Ideal.例如:
<TextBlock Margin="5" FontSize="9">This is a Test.Display test is crisp at small sizes</TextBlock> <TextBlock TextOptions.TextFormattingMode="Display" Margin="5" FontSize="9">This is a Test.Display test is crisp at small sizes</TextBlock>
TextOptions.TextFormattingMode附加属性它仅是针对小尺寸文本的解决方案。
鼠标光标
可以为任何元素使用Cursor属性设置鼠标光标,该属性继承自FrameworkElement类,每个光标通过一个System.Windows.Input.Cursor对象表示。可以通过System.Windows.Input.Cursors类的静态属性获取所以标准的Windows鼠标光标。在XAML中设置鼠标光标示例如下:
<Button Cursor="Help">Help</Button>
可以为一个按钮和包含它的窗口设置不同的光标,当鼠标移动到按钮上时,将显示为按钮设置的光标,而对于窗口中的其他区域则显示为窗口设置的光标。但是通过为父元素使用ForceCursor属性,父元素可以覆盖子元素的光标设置。
WPF支持自定义光标,可以使用普通的.cur光标文件,也可以使用.ani动画光标文件,为了使用自定义光标,需要为Cursor对象的构造函数传递光标文件的文件名或包含光标数据的流:
Cursor customCursor = new Cursor(System.IO.Path.Combine(applicationDir, "stopwatch.ani")); this.Cursor = customCursor;
Cursor对象不直接支持Url资源语法,但可以使用Application.GetResourceStream()方法获取光标文件资源的数据流来设置自定义光标:
StreamResourceInfo sri = Application.GetResourceStream(new Uri("stopwatch.ani", UriKind.Relative)); Cursor customCursor = new Cursor(sri.Stream); this.Cursor = customCursor;
内容控件
所有内容控件都继承自抽象的ContentControl类,ContentControl.HasContent属性:如果在控件中有内容,它返回true. ContentControl.ContentTemplate属性:通过该属性,可以创建一个模板,用于告诉控件如何显示它不识别的对象,使用它,可以更加智能的显示非继承自UIElement的对象。
对齐内容:
在FrameworkElement基类中的HorizontalAlignment和VerticalAlignment属性,用于在容器中对齐不同的控件,而在控件中,使用HorizontalContentAlignment和VerticalContentAlignment属性决定内容控件中的内容如何和其边框对齐。
通过Margin属性可以在相邻元素之间添加空间,内容控件使用一个和Margin互补的Padding属性在控件边缘和内容边缘之间插入空间。
Label
Label控件支持记忆符,记忆符是能够为链接的控件设置焦点的快捷键,Label控件通过Target属性支持此功能,为了设置Target属性,需要使用一个指向另一个控件的绑定表达式:
<Label Content="姓名_A" Target="{Binding ElementName=txtName}" /><TextBox Name="txtName" />
如果需要显示不支持记忆符的内容,就应使用轻量级的TextBlock元素,与Label控件不同,TextBlock元素还通过它的TextWrapping属性支持换行。
按钮
继承自ButtonBase类的控件有Button、GridViewColumnHeader、RepeatButton、ToggleButton,而CheckBox和RadioButton继承自ToggleButton。ButtonBase定义了Click事件并添加了对命令的支持,从而允许为更高层的应用程序任务触发按钮。ButtonBase还添加了ClickMode属性,该属性决定何时引发Click事件以响应鼠标动作。默认值为ClickMode.Release,表示当单击鼠标并释放鼠标键时引发Click事件,如果设置为ClickMode.Press表示当鼠标第一次按下时引发Click事件,如果设置为ClickMode.Hover表示将鼠标移动到按钮上并且在按钮上悬停一会儿时引发Click事件。
所有按钮都支持访问键,它和Label中的记忆符类似,添加下划线字符标识访问键,如果用户按下了Alt键和访问键,就会触发按钮单击事件。
Button 它提供三个属性:IsCancel、IsDefault、IsDefaulted
IsCancel:如果将它设置为true,按钮就成为窗口的取消按钮,在当前窗口的任何地方如果按下Escape键,就会触发该按钮。
IsDefault:如果将它设置为true,按钮就成为默认按钮,它的行为取决于焦点在窗口中的位置,如果焦点位于一个非按钮控件上,默认按钮具有蓝色阴影,几乎像是有焦点,如果按下Enter,就会触发默认按钮。如果焦点位于另一个按钮上,此时如果按下Enter,会触发当前按钮而不是默认按钮。
IsDefaulted:如果另一个控件具有焦点并且该控件不接受Enter输入,那么对于默认按钮,IsDefaulted属性会返回true,在这种情况下,按下Enter键会触发该按钮。
GridViewColumnHeader:当使用一个基于网格的ListView控件时,该类表示一列可以单击的标题。
RepeatButton:只要按钮保持按下状态,该类就不断的触发Click事件。
ToggleButton:它和RepeatButton都不是抽象类,所以在用户界面中可以直接使用它们,该类表示具有两个状态的按钮,当单击该按钮时,它会保持按下状态,直到再次单击该按钮以释放它。
RadioButton:它继承自ToggleButton。它通常由它们的容器进行分组,但它添加了一个GroupName属性,用于控制如何对单选按钮进行分组,通过GroupName可以控制在不同的容器或同一容器中进行分组而覆盖这一默认行为。
CheckBox:它继承自ToggleButton,ToggleButton类有IsChecked属性,它是一个可空的Boolean类型,在XAML中为IsChecked属性赋null值如下:
<CheckBox IsChecked="{x:Null}">A check box in indeterminate state</CheckBox>
<Button ToolTip="This is a tooltip" Content="I have a Tooltip" />
<CheckBox IsChecked="{x:Null}"> <CheckBox.ToolTip> <StackPanel> <TextBlock>Image and text</TextBlock> <Image Source="/WpfApplication1;component/LuFei.jpg"></Image> <TextBlock>Image and text</TextBlock> </StackPanel> </CheckBox.ToolTip> <CheckBox.Content>A check box in indeterminate state</CheckBox.Content> </CheckBox>
有几个工具提示属性不能通过ToolTip类的属性进行配置,此时需要使用ToolTipService类,它定义了许多与ToolTip相同的属性,它的所有属性都是附加属性,所以可以在控件标签中直接设置它们,InitialShowDelay属性:设置当鼠标悬停在元素上时,工具提示显示之前的延迟时间(单位毫秒),ShowDruation属性:设置如果用户不移动鼠标,在工具提示消失之前显示的时间。
<Button ToolTip="This is a tooltip" ToolTipService.InitialShowDelay="10" ToolTipService.ShowDuration="10000" Content="test" />
<TextBlock> You can use a Popup to provide a link for a specific <Run TextDecorations="Underline" MouseEnter="Run_MouseEnter"> term </Run> of interest. </TextBlock> <Popup Name="popLink" StaysOpen="False" Placement="Mouse" MaxWidth="200" PopupAnimation="Slide" AllowsTransparency="True"> <Border BorderBrush="Beige" BorderThickness="2" Background="White"> <TextBlock Margin="10" TextWrapping="Wrap"> For more information,see <Hyperlink NavigateUri="www.baidu.com" Click="Hyperlink_Click"> Wikipedia </Hyperlink> </TextBlock> </Border> </Popup>
private void Run_MouseEnter(object sender, MouseEventArgs e) { popLink.IsOpen = true; } private void Hyperlink_Click(object sender, RoutedEventArgs e) { Process.Start(((Hyperlink)sender).NavigateUri.ToString()); }