前言:

粗略而言,使用最多控件的基本为6类,即:
(1)布局控件:可以容纳多个控件或嵌套其他布局控件。有Grid、StackPanel、DockPanel等。他们拥有共同的父类Panel

Panel族控件包含:
StackPanel、UniformGrid、WraPanel……;
内容属性为Children。

(2)内容控件:只能一个其他控件或布局控件作为他的内容。有Window、Button等。他们的父类为ContentControl

ContentControl族控件包含:
Button、Label、CheckBox……;
内容属性的名称为:Content
其中,HeaderedContentControl是ContentControl的派生类。
HeaderedContentControl族控件包含:
Expander、GroupBox、HeaderedContentControl、TabItem;
内容属性为Header和Content。

(3)带标题内容控件:相当于一个内容控件,但可以加一个标题(Header),标题部分亦可容纳一个控件或布局控件。GroupBox、TabItem等是这类控件的典型代表。他们的父类为ComboBoxContentControl

(4)条目控件:可以显示一列数据,一般情况下这列数据的类型都相同。有ListBox、ComboBox等。他们的父类为ItemsControl

ItemsControl族控件包含:
Menu、MenuBase、ComboBox、ItemsControl、ListBox、ListView、TabControl、TreeView、StatusBar……;
内容属性的名称为:Items或ItemsSource。

(5)带标题条目控件:相当于一个条目控件加上一个标题显示区。TreeViewItem、MenuItem都属于此类控件。这类控件的节点显示在其Header区域,子节点则显示在其条目控件区域。他们的控件的父类为:HeaderedItemsControl

HeaderedItemsControl族控件包含:
MenuItem、TreeViewItem、ToolBar;
内容属性为Items,ItemsSource和Header。

(6)特殊内容控件:TextBox等。

补充:

Decorator族:
本族元素是在UI上起装饰效果的。
包含:Border、ViewBox……;
内容属性为Child。

菜单、工具栏和状态栏

菜单与工具栏位于主页面顶部。状态栏位于主页面下方,显示当前页面的状态信息。

1 Menu

WPF菜单可分为Menu和ContextMenu两种。ContextMenu称为上下文菜单,只有当用户发出请求(右击)或按下Shift+F10组合键时,会弹出上下文菜单,故上下文菜单又可称为弹出式菜单,在后面会提到。

创建菜单代码示例:

<DockPanel LastChildFill="False">             <!--可以考虑这里没有LastChildFill时,或者为True时是什么情况-><Menu DockPanel.Dock="Top"><MenuItem Header="_File"><MenuItem Header="_Open" Click="MenuItem_Click"/><MenuItem Header="_Exit" Click="MenuItem_Click_1" /></MenuItem><MenuItem Header="_Edit"><MenuItem Header="_Cut"/><MenuItem Header="_Copy"/></MenuItem></Menu>
</DockPanel>

运行结果:

2 ToolBar

工具栏,位于菜单下方,具有宿主类型(ToolBarTray)和项类型(ToolBar)。ToolBarTray可视为ToolBar的容器,用于调整工具栏的大小及位置。

代码示例:

<DockPanel LastChildFill="False"><ToolBarTray DockPanel.Dock="Top"><ToolBar><Button Content="Open"/><Button Content="Cut"/><Button Content="Copy"/><Button Content="Pase"/><Button Content="Exit"/></ToolBar><ToolBar Header="Search"><TextBox Width="120"/><Button Content="Go" Width="25"/></ToolBar></ToolBarTray>
</DockPanel>

运行结果:

从此例可以看出:工具栏可用做控件容器。

3 StatusBar

状态栏控件,通常位于窗体底部,用于显示状态文本信息。StatusBar也是容器控件。要呈现信息的控件是它的子元素。

代码示例:

<StatusBar DockPanel.Dock="Bottom"><TextBox Text="This is a StatusBar"/>
</StatusBar>

运行结果:

同时应该设置窗体的属性,让状态栏的右下角呈现调整区域。属性为:ResizeMode="CanResizeWithGrip"

补充:
Window的ResizeMode(大小调整模式)属性:NoResize、CanMinimize、CanResize(默认值)和CanResizeWithGrip。

其中:
NoResize:不可调节,同时没有最大最小按钮;
CanMinimize:不可调节。但可以最小化;(此时最大化按钮不可用)
CanResize:可调节(默认);
CanResizeWithGrip:可根据网格调节;(窗口右下脚显示可调节网格)


窗口控件(容器控件)

容纳子控件,并为子控件提供可视化分组。
布局控件都可视做容器控件。

1 Expander

Expander是可以展开和折叠的控件,由标题头和内容两部份组成。其中,Header属性设置标题头;Conent属性设置内容。

代码示例:

<Expander Header="Expander example"><Border Margin="10" Padding="9"><StackPanel><TextBox>I am first textbox</TextBox><TextBox>I am second textbox</TextBox></StackPanel></Border>
</Expander>

运行结果:

其中,解释一下<Border Margin="10" Padding="9">代码的含义:Margin是指Border与其父控件之间的距离;Padding是指Border与其子控件之间的距离。

注意:Expander:在代码运行后需要人为的点击标题头,其中的内容才会展开;如果想要在代码运行后,即为展开状态,则要设置属性IsExpanded=“True”。这样就不需要人为的点击,就会自动展开。

2 TabControl

TabControl支持传统的标签风格,设计用户界面时,常会用选项卡设置、标签式浏览器等。

代码示例:

<TabControl Margin="10"><TabItem Header="Tab1"><StackPanel><TextBlock Text="hello"/></StackPanel></TabItem><TabItem Header="Tab2"><StackPanel><TextBlock Text="hello world!"/></StackPanel></TabItem>
</TabControl>

运行结果:

3 GroupBox

GroupBox是对控件进行分组的可视化容器控件,并将同类控件归类,置于GroupBox控件中。

代码示例:

<GroupBox Header="hello" Margin="10" Padding="9"><StackPanel><TextBlock Text="hello world!"/><TextBlock Text="hello world!"/></StackPanel>
</GroupBox>

运行结果:

范围控件

WPF具有3个范围控件:Slider、ScrollBar和ProgressBar。这些控件这些控件在规定的范围内取值,继承自RangeBase。

RangeBase类的公共属性有:
Maximun:上限的最大值。
Minimum:下限的最小值。
LargeChangeValue:属性值的最大变化。
SmallChangeValue:属性值的最小变化。
Value:控件当前值。

其中,当Value值改变了,Slider、ScrollBar事件响应,但是ProgessBar控件在Value变化时,不响应,它能响应Click、Dragdrop、Dragover、Mousemove、Mouseup、Mousedown这六个事件。

其中:
DragDrop:拖放完成,也就是鼠标拖入对象并在拖放区域释放。
DragEnter:拖放进入,也就是鼠标拖放对象进入拖放区域。
DragLeave:离开拖放区域。
DragOver:拖放对象悬浮于拖放区域,在拖放区域内移动时多次触发。

1 Slider

Slider控件允许用户在可视化的最小值和最大值范围之间取值。

其中,Slider的属性:
IsSnapToTickEnabled:指示 Slider 是否自动将 Thumb 移动到最近的刻度线。
TickPlacement:标记位置?
TickFrequency:标记间隔大小。
IsSelectionRangeEnabled:是否加范围选择。
SelectionStart:选择范围初始值。
SelectionEnd:选择范围终止值。

代码示例:

<Slider Minimum="0" Maximum="100"  Value="50"   IsSnapToTickEnabled="False"  TickPlacement="BottomRight" TickFrequency="5" IsSelectionRangeEnabled="True"  SelectionStart="50"  SelectionEnd="100"/>

运行结果:

补充:此处的Value="50"的含义为:当前指在50处。

2 ScrollBar

ScrollBar控件是滚动条状态,通过设置Orientation=“Horizontal”,为水平滚动。

代码示例:

<ScrollBar Orientation="Horizontal" Width ="250" Height="20" Margin="10" Background="LightSalmon" Minimum="8" Maximum="300" Value="98"/>

运行结果:

3 ProgessBar

ProgressBar称之为进度条,指示当前任务的工作状态,不与用户发生交互,也不响应鼠标事件和键盘输入。

代码示例:

<ProgressBar Width="200" Height="15" Background="Orange" Foreground="LawnGreen" IsIndeterminate="True" />

运行结果:

文本编辑器

PasswordBox、TextBox、RichTextBox、InkCanvas。

1 PasswordBox(密码框)

在密码框里面的字符串,显示为几个点。

我们可以用PasswordChar属性来控制使用什么样的字符来替代真实字符;还可以控制显示字符的长度:MaxLength=“X”。

代码示例:

<StackPanel Margin="10"><Label Content="Text:"/><TextBox /><Label Content="Password:"/><PasswordBox  PasswordChar="X" MaxLength="6" />
</StackPanel>

运行结果:

当你需要获取密码框的密码时,在后台代码使用Password属性。然而,出于安全考虑,Password属性并不是一个依赖属性,也就意味着无法绑定。

2 TextBox

在TextBox中添加了两个属性:AcceptsReturn决定了文本框是多行的,当你按下回车键时,换到下一行。TextWrapping使文字到达右边界时自动切换到下一行。

将IsReadOnly属性设置为True,可防止在状态文本框中编辑。

代码示例:
XAML

<StackPanel><TextBox  Margin="5" Height="50" SelectionChanged="TextBox_SelectionChanged"/><TextBox  x:Name="txtStatus" Height="50"  AcceptsReturn="True" TextWrapping="Wrap" IsReadOnly="True"    Margin="5"/>
</StackPanel>

CS

private void TextBox_SelectionChanged(object sender, RoutedEventArgs e)
{TextBox textBox = sender as TextBox;txtStatus.Text = "Selection starts at character #" + textBox.SelectionStart + Environment.NewLine;//Environment.NewLine换行txtStatus.Text += "Selection is " + textBox.SelectionLength + "character(s) long" + Environment.NewLine;txtStatus.Text += "Selected text: '" + textBox.SelectedText + "'";
}

SelectionStart:获取当前光标的位置,也就是选择器开始的地方。
SelectionLength:获取当前选择器的长度,否则返回0。
SelectedText:获取当前选中的字符,否则返回空的字符串。

字体常用的属性:

FontSize:字体大小。
FontWeight:字体粗细,Blod加粗。
FontFamily:字体,就是选择宋体,黑体,幼圆等等的属性,当确定FontFamily时,不能使用缩写字符串。
Foreground:字体颜色。
FontStyle:可设置斜体,Normal是指正常, Italic是指斜体字,而Oblique是倾斜的文字,对于没有斜体的字体应该使用Oblique属性值来实现倾斜的文字效果。
FontStretch:设置字体拉伸或压缩程度,UltraCondensed减至正常宽度50%。
TextWrapping:显示的文本的换行方式。NoWrap不自动换行,超出的部分被截断; Wrap自动换行,文本长度超出控件宽度时自动换行。
TextDecorations:对文字的修饰 。共有四个值: OverLine (上划线)、Underline(下划线 常用)、Strikethrough(线在中间)、 Baseline。

列表控件

WPF中有4个标准列表控件:ListBox、ComboBox、ListView和TreeView,用于显示和选择数据。

前言:

其中,列表控件通过Items和ItemsSource两属性添加数据源。
Items逐条添加数据源到列表控件中。
代码:

ListBox list = new ListBox();
list.Items.Add("one");
list.Items.Add("two");

ItemSource是以集合的方式添加数据源到列表控件中。
代码:

String[] Items = new string[] {"one","two" };
ListBox list1 = new ListBox();
list1.ItemsSource=Items;

ItemsControl具有一个名为ItemsPanel的属性,它的数据类型是ItemsPanelTemplate。ItemsPanelTemplate也是一种控件Template,它的作用是可以让程序员可以控制ItemControl的条目容器。

【例1】如图。

代码示例:

<Grid Margin="5"><ListBox><TextBlock>Darren</TextBlock><TextBlock>Andy</TextBlock><TextBlock>Jacky</TextBlock><TextBlock>T-Soft</TextBlock></ListBox>
</Grid>

因为ListBox的条目都是自上而下排列的,所以我们不需要改变什么,但是如果,题目变成了这样呢?
【例2】如图。

代码示例:
这时候我们就用到了上面说的。

<Grid Margin="5"><ListBox><ListBox.ItemsPanel><ItemsPanelTemplate><StackPanel Orientation="Horizontal" VerticalAlignment="Top"/></ItemsPanelTemplate></ListBox.ItemsPanel><TextBlock>Darren</TextBlock><TextBlock>Andy</TextBlock><TextBlock>Jacky</TextBlock><TextBlock>T-Soft</TextBlock></ListBox>
</Grid>

运行结果:

1 ListBox

我们可以把任意类型的数据放到列表控件中,并用模板来改变控件的外观。

模板代码:

<ListBox.ItemsPanel><ItemsPanelTemplate><UniformGrid Columns="4"/></ItemsPanelTemplate>
</ListBox.ItemsPanel>

代码示例:

<ListBox Height="100" Width="300"><ListBox.ItemsPanel><ItemsPanelTemplate><UniformGrid Columns="4"/></ItemsPanelTemplate></ListBox.ItemsPanel><ListBoxItem Content="Item1"/><ListBoxItem Content="Item2"/><ListBoxItem Content="Item3"/><ListBoxItem Content="Item4"/><ListBoxItem Content="Item5"/><ListBoxItem Content="Item6"/><ListBoxItem Content="Item7"/><ListBoxItem Content="Item8"/><ListBoxItem Content="Item9"/><ListBoxItem Content="Item10"/><ListBoxItem Content="Item11"/><ListBoxItem Content="Item12"/>
</ListBox>

运行结果:

2 ComboBox

ComboBox 从用户的角度来看,就是由一个文本输入控件和一个下拉菜单组成的,用户可以从一个预先定义的列表中选则一个选项,也可以直接再文本框中输入文本。

代码示例:

<ComboBox Height="30" VerticalAlignment="Top"><ComboBoxItem Content="ComboBox Item1"/><ComboBoxItem Content="ComboBox Item2" IsSelected="True"/><ComboBoxItem Content="ComboBox Item3"/><ComboBoxItem Content="ComboBox Item4"/><ComboBoxItem Content="ComboBox Item5"/>
</ComboBox>

运行结果:

其中,IsSelected="True"所在的位置表示当前的内容ComboBox的内容是程序运行后的默认值。

3 ListView

4 TreeView

TreeView可以视为列表框的嵌套,也就是说列表框中的条目上还是一个列表框。TreeView把每个TreeView对象看作一个控件。

代码示例(1):

<TreeView x:Name="tw"><TreeViewItem Header="Name"><TreeViewItem Header="Tom"/><TreeViewItem Header="Alice"/></TreeViewItem><TreeViewItem Header="Hobby"><TreeViewItem Header="Sing"/><TreeViewItem Header="Draw"/></TreeViewItem>
</TreeView>

运行结果:

代码示例(2):

<TreeView x:Name="tw"><TreeViewItem Header="北京"><TreeViewItem Header="故宫"><TreeViewItem Header="东华门"/></TreeViewItem></TreeViewItem>
</TreeView>

运行结果:

上面这个代码也可以用C#代码实现。

代码示例:

XAML

<TreeView x:Name="tw"></TreeView>

CS

TreeViewItem item1 = new TreeViewItem() { Header = "北京" };TreeViewItem item11 = new TreeViewItem() { Header = "故宫" };item11.Items.Add("南大门");item11.Items.Add("神武门");item11.Items.Add("东华门");item11.Items.Add("西华门");item1.Items.Add(item11);item1.Items.Add("颐和园");item1.Items.Add("水立方");tw.Items.Add(item1);

运行结果:

【例1】如图。

代码示例:

<CheckBox Margin="10"><TreeView x:Name="tw"><TreeViewItem Header="Name"><TreeViewItem Header="Tom"/><TreeViewItem Header="Alice"/></TreeViewItem><TreeViewItem Header="Hobby"><TreeViewItem Header="Sing"/><TreeViewItem Header="Draw"/></TreeViewItem></TreeView>
</CheckBox>

运行结果:

构建控件

元素合成的思想,小控件构建大控件。

1 ToolTip

ToolTip既可以表示工具提示属性,还可以表示一个类。

当它作为Button控件(提示)属性时:

代码示例:

<Button ToolTip="please click to enter next step" Height="100" Width="100"/>

运行结果(不需要点击,只需要把鼠标放置在Button上即可):

在ToolTip类中,可以添加任何的控件来修饰这个控件的ToolTip

代码示例:

<Button Height="25" Content="Mouse" HorizontalAlignment="Left"><Button.ToolTip><ToolTip Background="Green" Foreground="White" HasDropShadow="False" Placement="Mouse"><TextBlock Margin="5" Text="ToolTip类的使用方法"/></ToolTip></Button.ToolTip>
</Button>

运行结果:

ToolTip类的属性:
1.HasDropShadow:表示是否有阴影,如果控件有投影,则为 true;否则为 false。 默认为 false。
2.Content : 提示内容(注:这里的Content可以放控件,也可以是ToolTip中的Content属性)。
3.Placement :提示框的显示位置(Bottom, Right, Mouse, Left, Top)。
4.HorizontalOffset : 水平偏移量。
5. VerticalOffset : 垂直偏移量。

除了可以在ToolTip中放入文本框之外,还可以在其中放入图片的相关控件。

代码示例:

<TextBox ToolTipService.ShowDuration="6000" ToolTipService.Placement="Bottom"><TextBox.ToolTip ><StackPanel><TextBlock Text="请输入下面图片中花的花名"/><Image Source="/image.jpg"/></StackPanel></TextBox.ToolTip>
</TextBox>

运行结果:

对于代码中的ToolTipService.ShowDuration="6000" ToolTipService.Placement="Bottom"的解释与补充。

使用ToolTipService类可以配置显示工具提示的相关延迟时间。

ToolTipService的主要属性:

  1. ToolTipService.InitialShowDelay=“1000” //获取或设置工具提示打开前的时间长度。时间单位是ms,

1s=1000ms

  1. ToolTipService.ShowDuration=“7000” //获取或设置工具提示打开后的显示时间长度
  2. ToolTipService.Placement=“MousePoint”//出现的位置
  3. ToolTipService.BetweenShowDelay=“2000”//是当鼠标从一个控件移动到另一个控件上时的时间如果少于它的值,第二个控件的ToolTip就会立刻显示,如果大于这个值,就会按照第二个控件ToolTipService.InitialShowDelay的值来延迟显示。
  4. ToolTipService.Placement=“Right”//工具提示相对原控件打开时的方向,并指定工具提示在与屏幕边界重叠时的行为。
  5. ToolTipService.PlacementRectangle=“50,0,0,0”//获取或设置相对于其来放置工具提示的矩形区域。
  6. ToolTipService.HorizontalOffset=“10”//获取或设置由 PlacementRectangle 和 PlacementTarget 属性为工具提示指定的区域的左侧偏移量。
  7. ToolTipService.VerticalOffset=“20”//获取或设置由 PlacementRectangle 和 PlacementTarget 属性为工具提示指定的区域的顶部距离。
  8. ToolTipService.HasDropShadow=“False”//获取或设置工具提示是否显示投影效果。
  9. ToolTipService.IsEnabled=“True”//获取或设置是否显示工具提示。

2 Thumb

Thumb类,表示可由用户拖动的控件。一般设置在Canvas容器内,因为它是唯一一个是绝对定位的控件。

其中,Thumb的核心事件有:

  1. DragStarted——当你在它上面按下鼠标左键,开始拖动时发生;
  2. DragDelta——只要你的拖动仍在操作(没松开鼠标左键),它就会不断地发生;
  3. DragCompleted——在拖动操作结束后发生。

代码示例:

XAML

<Canvas><Thumb x:Name="thumb1" Height="15" Width="20" Background="Yellow" Canvas.Left="100" Canvas.Top="100" DragDelta="thumb1_DragDelta" DragStarted="thumb1_DragStarted"></Thumb>
</Canvas>

CS

double startleft, starttop;
private void thumb1_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
{startleft = Canvas.GetLeft(thumb1);starttop = Canvas.GetTop(thumb1);
}
private void thumb1_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{double left = startleft + e.HorizontalChange;double top = starttop + e.VerticalChange;Canvas.SetLeft(thumb1, left);Canvas.SetTop(thumb1, top);
}

3 Border

Border是一个装饰的控件,此控件绘制一个边框、一个背景,在 Border 中只能有一个子控件(通常是布局面板,也可以是普通的控件) ,并为其添加背景或在其周围添加边框。

其中,Border的属性有:

  1. Background:使用Brush对象设置边框中所有内容后面的背景。可使用固定颜色背景,也可使用其他更特殊的背景BorderBrush:此属性设置 Border 用来绘制边框的 Brush 对象。
  2. BorderBrush和BorderThickness:使用Brush对象设置位于Border对象边缘的边框的颜色,并设置边框的宽度。为显示边框,必须设置这两个属性
  3. CornerRadius:该属性可使边框具有雅致的圆角。CornerRadius的值越大,圆角效果就越明显
  4. Padding:该属性在边框和内部的内容之间添加空间(与此相对,Margin属性在边框之外添加空间)

代码示例:

<Canvas><Border Canvas.Left="12" Canvas.Top="5" BorderThickness="5" CornerRadius="0" Padding="10" BorderBrush="Green"  ><TextBox Text="WPF Border" /></Border><Border Canvas.Left="135" Canvas.Top="3" BorderThickness="5,3,5,3" CornerRadius="0,18,0,18" Padding="10" BorderBrush="Green" ><TextBox Text="WPF Border" /></Border><Border Canvas.Left="249" Canvas.Top="3" BorderThickness="5" CornerRadius="8" Padding="10" BorderBrush="Green" ><TextBox Text="WPF Border" /></Border><Border Canvas.Left="365" Canvas.Top="3" BorderThickness="15,5,15,5" CornerRadius="16" Padding="10" BorderBrush="Green" ><TextBox Text="WPF Border" /></Border>
</Canvas>

运行结果:

其中,BorderThickness="15,5,15,5":图形的左边框宽度为15,上宽度为5,右宽度为15,下宽度为5。

4 Popup

(1)弹出框
WPF的Popup用于创建浮动窗口。

代码示例:

XAML

<StackPanel><Button   Height="25" Margin="20" Click="Button_Click"/><Popup x:Name="popup" Placement="Mouse" PopupAnimation="Scroll" AllowsTransparency="True"><Button Content="Hello,I am a WPF Popup"/></Popup>
</StackPanel>

CS

private void Button_Click(object sender, RoutedEventArgs e)
{popup.IsOpen = !popup.IsOpen;//IsOpen表示Popup控件是否可见 //popup.IsOpen = true;这样写也是可以的。
}

!popup.IsOpen表示可见;popup.IsOpen表示不可见。

运行结果:

对于PopupAnimation="Scroll" AllowsTransparency="True"的解释。

AllowsTransparency:如果在在完全信任环境中运行的应用程序中将属性设置为true,否则 AllowsTransparency 属性值将更改为 false 。
PopupAnimation:获取或设置打开和关闭Popup控件的动态效果。当属性AllowsTransparency属性设置为true时,Popup才可以显示效果。
(2)弹出式菜单(ContextMenu)
又称为上下文菜单。

代码示例:

XAML

<Button x:Name="cmd" Content="Popup" Height="100" VerticalAlignment="Top" Click="cmd_Click"><Button.ContextMenu><ContextMenu x:Name="menu"><MenuItem Header="MenuItem0"><MenuItem Header="MenuItem01"/><MenuItem Header="MenuItem02"/><MenuItem Header="MenuItem03"/></MenuItem><MenuItem Header="MenuItem1"/></ContextMenu></Button.ContextMenu>
</Button>

CS

private void cmd_Click(object sender, RoutedEventArgs e)
{menu.IsOpen = true;
}

运行结果:

5 ScrollViewer(滚动查看器)

包括:HorizontalScrollBarVisibility(控制水平的滚动条)和VerticalScrollBarVisibility(控制垂直的滚动条)。

有四个属性:

Disabled: 禁用滚动条。表现在无论内容是否超过父容器大小,都不会显示滚动条,并且滚动鼠标滑轮也不会滑动内容。
Auto :自动。内容不超出父容器时,不显示滚动条,超出父容器时,显示滚动条。
Hidden: 隐藏滚动条。与Disabled的区别在于,这里只是隐藏,当滚动鼠标滑轮时,依然可以滚动内容。
Visible: 始终显示。不论内容是否超过父容器大小,都会显示滚动条。

代码示例:

XAML

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" ><StackPanel><TextBox Margin="3" x:Name="textbox"  /><Button Margin="3" Content="Add Name" Click="Button_Click"  /><ListBox Margin="3" x:Name="listbox"  /></StackPanel>
</ScrollViewer>

CS

private void Button_Click(object sender, RoutedEventArgs e)
{this.listbox.Items.Add(textbox.Text);
}

运行结果:

6 Viewbox (视图框)

Viewbox带有一个独立子对象,内容可以随着控件中的文字大小进行缩放。

代码示例:

<Grid><Viewbox VerticalAlignment="Top"><TextBlock Text="WPF Viewbox.TextBlock" VerticalAlignment="Top"/></Viewbox><Viewbox VerticalAlignment="Bottom"><Button Content="WPF Viewbox.Button,hello,word" VerticalAlignment="Bottom"/></Viewbox>
</Grid>

运行结果:

日期控件

包括:Calendar和DatePicker。这两个控件为用户提供日期选择。

Calendar和DatePicker的公共属性:

  1. DisplayDateStart和DisplayDateEnd:日期显示的起始时间和结束时间。
  2. BlackoutDates:保存日历中将被禁用或不能选择的日期集合。

BlackoutDates.AddDatesInPast()方法:阻止选择被禁用的日期。

  1. SelectedDate:为DateTime对象提供选择的日期,没有日期被选中时使用null。
  2. DisplayDate:使用DateTime对象确定日历视图中最初显示的日期。若DisplayDate和SelectedDate均为空,使用当前日期。
  3. FirstDayOfWeek:默认情况下,日历每周的第一天为周日。
  4. IsTodayHighlighted:确定日历视图是否突出显示当前日期。

1 Calendar(日历)

Calendar控件除了前面的公共属性外,还有其独有的DisplayMode属性,用来调整日历显示模式,分为Year、Month和Decade共3种。默认情况下为Month模式,显示一个月份,通过单击箭头按钮,选择月份。

代码示例:

<Window.Resources><Style TargetType="CalendarDayButton" x:Key="CalendarDayBtnStyle"><Setter Property="Background"><Setter.Value><LinearGradientBrush><GradientStop Color="White"/><GradientStop Color="LightBlue" Offset="1"/></LinearGradientBrush></Setter.Value></Setter></Style><Style TargetType="CalendarButton" x:Key="CalendarButtonStyle"><!--当DisplayMode不等于"Month"时,设置的背景色--><Setter Property="Background" Value="Blue"/></Style>
</Window.Resources><Grid><Calendar Margin="10"  x:Name="calendarCt1" DisplayMode="Month" FirstDayOfWeek="Monday" FlowDirection="RightToLeft" CalendarDayButtonStyle="{StaticResource CalendarDayBtnStyle}" CalendarButtonStyle="{StaticResource CalendarButtonStyle}"  />
</Grid>

运行结果:

补充:
FirstDayOfWeek=“Monday” 设置星期一是每行的开始
FlowDirection=“RightToLeft” 查看日历的方向是从右向左

2 DatePicker(日期选择器)

DatePicker控件,与Calendar相比,DatePicker多出了一个TextBox用来提取从Calendar中选择的日期。
其特有的属性是IsDropDownOpen,表示是否打开DatePicker控件中的下拉日历视图;SelectedDateFormat是日期格式。

代码示例:
首先引用命名空间:xmlns:sys="clr-namespace:System;assembly=mscorlib"
之后,

<DatePicker  SelectedDateFormat="Long" SelectedDate="{x:Static sys:DateTime.Now}" />

运行结果:

SelectedDateFormat="Long"的补充:

按钮

包括:Button,CheckButton和RadioButton。
Button实现了标准按钮的默认外观。
CheckButton和RadioButton是用于切换开关的按钮,支持IsChecked(数据模型)和IsThreeState(交互模型)属性。当IsThreeState为True时,复选框中的值可从Checked(勾选)、Unchecked(未勾选)和Indeterminate(不确定)这三个值中选择。

其中,IsChecked的可选择值为:Check Null、Check True、Check False;RadioButton也是一样的。

代码示例:

<StackPanel Orientation="Horizontal"><Button Margin="10" Content="Button" Height="50" VerticalAlignment="Top"/><StackPanel Margin="0,0,50,0"><CheckBox IsChecked="{x:Null}" Content="Check Null" Margin="10"/><CheckBox IsChecked="True" Content="Check True" Margin="10"/><CheckBox IsChecked="False"  Content="Check False" Margin="10"/></StackPanel><StackPanel Margin="50,0,0,0"><RadioButton IsChecked="{x:Null}"  IsThreeState="True" Content="RadioButton Null" Margin="10"/><RadioButton IsChecked="True" Content="RadioButton True" Margin="10"/><RadioButton IsChecked="False" Content="RadioButton False" Margin="10"/></StackPanel>
</StackPanel>

运行结果:

补充

如何将英文周几转化为中文或数字。

String str1 = DateTime.Now.DayOfWeek + "    " + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
string[] weekdays = { "星期日", "星期一", "星期二", "星期三", "星期四","星期五", "星期六" };
String str2 = weekdays[Convert.ToInt32(DateTime.Now.DayOfWeek)] + "    " + DateTime.Now.ToString("yyyy年MM月dd日HH:mm:ss");

首先,
DateTime.Now.DayOfWeek

DateTime:表示时间上的一刻。通常以日期和当天的时间表示。
Now:获取一个 DateTime 对象,该对象设置为此计算机上的当前日期和时间,表示为本地时间。
DayOfWeek:获取此实例所表示的日期是星期几。

Convert.ToInt32(DateTime.Now.DayOfWeek):表示将英文周几转化为数字(从周日开始计数)。

WPF--控件(代码讲解)相关推荐

  1. 解决 CefSharp WPF控件不能使用输入法输入中文的问题(代码已提交到 github)

    首先,本文所有 代码已经提交到github,需要的可以直接从github获取:https://github.com/starts2000/CefSharp,希望可以帮助到有需要的朋友们. CEF 简介 ...

  2. 第一章:初识WPF,XAML,WPF控件

    前言 总目录 本章主要介绍WPF与XAML,以及WPF的控件的基本使用,让大家先初步认识WPF. 关于WPF的官方资料:官方WPF文档1 .官方WPF文档2.官方WPF文档3.官方WPF文档4 一.W ...

  3. wpf控件设计时支持(2)

    原文:wpf控件设计时支持(2) 这篇介绍在wpf设计时集合项属性添加项的定义和自定义控件右键菜单的方法 集合项属性设计时支持 1.为集合属性设计器识别具体项类型 wpf设计器允许定义集合项的类型,如 ...

  4. wpf控件开发基础(1)

    从现在开始,我将尝试写有关wpf控件开发相关的知识,把文章这对我来说很难,所以这个系列的文章在时间跨度上可能会拖的比较长.我希望我介绍是比较详细的,而不仅仅是一个简单的控件开发流程.我是一个真正的We ...

  5. 在WinForm应用程序中嵌入WPF控件(转)

      我们知道,在WPF界面上添加WinForm的控件需要使用WindowsFormHost类.而在WinForm界面上添加WPF控件该如何做呢?有没有类似的类呢?明显是有的,ElementHost就是 ...

  6. [转] 使用模板自定义 WPF 控件

      [转] 使用模板自定义 WPF 控件                                                                                 ...

  7. wpf控件设计时支持(1)

    wpf控件设计时支持(1) 原文:wpf控件设计时支持(1) 这部分内容几乎是大家忽略的内容,我想还是来介绍一下. 本篇源码下载 1.属性元数据 在vs IDE中,在asp.net,winfrom等开 ...

  8. wpf控件设计时支持(3)

    wpf设计时调试 编辑模型 装饰器 1.wpf设计时调试 为了更好的了解wpf设计时框架,那么调试则非常重要,通过以下配置可以调试控件的设计时代码 (1)将启动项目配置成外部的visual studi ...

  9. WPF 控件库——仿制Windows10的进度条

    WPF 控件库--仿制Windows10的进度条 原文:WPF 控件库--仿制Windows10的进度条 一.其实有现成的 先来看看Windows10进度条的两种模式: 网上有不少介绍仿制Window ...

  10. SAP屏幕设计器专题:编写控件代码(三)

    上一篇博文我只是画了一个屏幕,一个外壳而已,真正要实现我们需要的功能还需要写相应的代码. 输入SE51,打开我们的例子程序,切换到"流程逻辑",默认的屏幕代码如下图所示: 第一个P ...

最新文章

  1. 春节充电 | 送你10本机器学习和数据科学必读书(附PDF下载)
  2. mysql 5.5.37 my.cnf,linux安装最新mysql5.5,my.cnf找不到解决办法
  3. Python os.makedirs详细介绍
  4. 博客园T恤内部泄漏版(附图)
  5. C++设计模式-使用Qt框架模拟策略模式(Strategy)+简单工厂实现商场促销
  6. IDEA 配置-XX:-RestrictContended参数
  7. 关于anaconda下载包的位置的问题
  8. TDD测试驱动开发案例【水货】
  9. 机顶盒ttl无法输入_请教大神,机顶盒接TTL进不了uboot模式
  10. 用C#通过sql语句操作Sqlserver数据库教程
  11. 贴片铝电容识别及型号_2.贴片电容和贴片铝电解的封装材质型号大全
  12. 游戏开发入门(一)游戏发展史
  13. 10.2 项目干系人管理
  14. 加油卡充值 数据接口
  15. sh.k6p.co.index.php,PHP--微信中使用支付宝--提示跳转页面的源代码
  16. TCP/IP五层模型介绍
  17. IntelliJ IDEA汉化,IntelliJ IDEA安装中文语言包。IntelliJ IDEA 2020.1正式发布,支持中文啦。
  18. Linux系统中的超级用户,普通用户,特殊用户(特殊用户)3种类型
  19. MySQL查询报错Unknown column ‘new_edition‘ in ‘IN/ALL/ANY subquery‘
  20. Unity3D的Rigidbody类中useGravity、isKinematic和velocity的使用注解

热门文章

  1. 【推免攻略】五.2022年北交计算机学院夏令营、预推免保研经验
  2. for循环中的三语句执行顺序
  3. HorizontalScrollView 自动滑动
  4. 网络舆情信息工作怎么做的措施及建议
  5. MFC编程实例二:进度条的使用
  6. 搭建网站,需要几种服务器?
  7. 基于python的transbigdata实现出租车轨迹数据分析与可视化
  8. 传奇手游漏洞获取gm权限_如何获取传奇私服gm权限
  9. 微信小程序实现一个简单的倒计时效果
  10. Mysql运维常用命令回顾整理