WPF一直都是断断续续的使用。偶尔用到一下。但是每次间隔比较长,需要重新学习,就写了这篇日志。以后有问题,看这个就可以了解各大概,然后针对细节再另外想办法。

微软的东西真心好,如果什么都不懂,可以直接用控件快速上手,如果有高级要求,可以调底层的库,自己实现。

默认可以看到的控件

1、Border 放到其他控件内部,给其他控件画边框,其他容器必须支持双标签。

BorderBrush 边框笔刷颜色

BorderThickness 边框宽度

<Border
BorderBrush="Chocolate" BorderThickness="">
</Border>

Border

2、Button 按钮,按钮用图片应该设置内容为Image,而不能设置BackGroud为Image,如果只设置背景,按钮鼠标经过样式还在

            <Button>
<Image Source="\images\btn.jpg"></Image>
</Button>

图片按钮

3、Calendar 日历

4、Canvas 画布控件,用来画图的。也可以用来做容器用。子控件根据left/right和top/bottom来获取相对与canvas边界的定位。

    <Canvas >
<Button Content="确认" Canvas.Left="305" Canvas.Top="83" Width="75"/>
<TextBox Height="23" Canvas.Left="180" Canvas.Top="83" Width="120"/>
</Canvas>

Canvas做容器

5、Checkbox 复选框

<CheckBox Margin="5" Click="点击事件">是否需要验证码</CheckBox>

CheckBox

6、Combobox 下拉列表框

<UserControl x:Class="GameProject.UserControls.ColorSelector"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Loaded="UserControl_Loaded"
>
<ComboBox x:Name="box" SelectionChanged="Box_SelectionChanged" SelectedValuePath="Color">
</ComboBox>
</UserControl>

颜色选择器Demo

using System.Reflection;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes; namespace GameProject.UserControls
{
/// <summary>
/// ColorSelector.xaml 的交互逻辑
/// </summary>
public partial class ColorSelector : UserControl
{
public class ColorComboBoxItem : ComboBoxItem
{
public Color Color { get; set; }
} public Color SelectedColor { get; set; } public ColorSelector()
{
InitializeComponent();
} private void Init()
{
box.Items.Add(new ComboBoxItem()
{
Content = "--请选择颜色--",
IsSelected = true
}); PropertyInfo[] props = typeof(Colors).GetProperties();
foreach (PropertyInfo prop in props)
{
//根据Colors内颜色的个数创建ColorListBoxItem
box.Items.Add(GetItem(prop.Name, (Color)prop.GetValue(null, null)));
}
} private ComboBoxItem GetItem(string text, Color color)
{
StackPanel stack = new StackPanel
{
Orientation = Orientation.Horizontal
}; //添加颜色方块
var rect = new Rectangle
{
Width = ActualWidth - ,
Height = ActualHeight - ,
Margin = new System.Windows.Thickness(),
Stroke = SystemColors.WindowTextBrush,
Fill = new SolidColorBrush(color)
};
stack.Children.Add(rect); //添加TextBlock
var particalText = new TextBlock
{
VerticalAlignment = VerticalAlignment.Center,
Text = text
};
stack.Children.Add(particalText); var item = new ColorComboBoxItem()
{
Color = color,
Content = stack,
};
return item;
} private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
Init();
} private void Box_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var comboxItem = sender as ComboBox;
var value = comboxItem.SelectedValue;
if (value != null)
{
SelectedColor = (Color)value;
}
}
}
}

颜色选择器Demo 后台代码

7、ContentControl 内容控件。button、checkbox等的基类。一般控件都是现实Text中的文本,这个控件显示Content属性中的文本。

8、DataGrid 显示表格数据。水很深。详情见MSDN:https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid(VS.100).aspx

9、DataPicker 日期选择控件,带日历。

10、DockPanel 停靠布局容器。子控件就像一个个船,定义DockPanel.Dock属性表示向上/下/左/右靠过去。如VS的布局方式大致如下:

<DockPanel>
<!--停靠布局,让菜单栏和工具栏位于窗口顶部-->
<Menu DockPanel.Dock="Top">
<MenuItem Header="文件(F)">
<!--菜单项为MenuItem,文字使用属性 Header-->
<MenuItem Header="新建">
<MenuItem Header="项目"></MenuItem>
<MenuItem Header="文件"></MenuItem>
<MenuItem Header="从现有代码创建项目"></MenuItem>
</MenuItem>
<MenuItem Header="打开"></MenuItem>
<MenuItem Header="起始页"></MenuItem>
<Separator />
<MenuItem Header="添加"></MenuItem>
<Separator />
<MenuItem Header="关闭"></MenuItem>
<MenuItem Header="关闭解决方案"></MenuItem>
</MenuItem>
<MenuItem Header="编辑"></MenuItem>
<MenuItem Header="视图"></MenuItem>
<MenuItem Header="项目"></MenuItem>
<MenuItem Header="生成"></MenuItem>
</Menu>
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<!--ToolBar和StatusBar就是一个容器-->
<Button Content="&lt;-"></Button>
<Button Content="-&gt;"></Button>
<Separator />
<Button Content="新建项目"></Button>
<Button Content="打开文件"></Button>
<Button Content="保存"></Button>
<Button Content="全部保存"></Button>
<Separator />
<Button Content="撤销"></Button>
<Button Content="重做"></Button>
</ToolBar>
<ToolBar>
<Button Content="注释"></Button>
<Button Content="取消对选中行的注释"></Button>
<Separator />
<Button Content="在当前标签切换书签"></Button>
<Button Content="将插入符号移动到上一书签"></Button>
</ToolBar>
</ToolBarTray> <StatusBar DockPanel.Dock="Bottom" Height="20">
<TextBlock Text="已保存的项 行 41 列 54 字符 53 Ins"></TextBlock>
</StatusBar>
<TextBox DockPanel.Dock="left" Text="工具箱" Width="100"></TextBox>
<TextBox DockPanel.Dock="left" Text="MainWindow.xaml" Width="400"></TextBox>
<TextBox DockPanel.Dock="left" Text="解决方案资源管理器"></TextBox>
</DockPanel>

DockPanel

11、DocumentViewer

12、Ellipse 实心椭圆

13、Expander 下拉框

14、Frame 是一种支持导航的内容控件

<Frame NavigationUIVisibility="Hidden" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" Content="{Binding Page}"></Frame>

不显示导航,并且内容是一个Page控件,用了绑定语法

15、Grid 网格布局控件。内部分两部分:

<Grid.RowDefinitions>和<Grid.ColumnDefinitions>定义行列,行列的宽高有两种表示方法,按尺寸和比例。按比例,表示方式是加 数字+*,计算方式是,如下面的例子,三个列的尺寸比是1:1:2。尺寸和比例可以混用,会先将尺寸扣除,剩下的按比例显示。

控件部分需要指定所在行列,可以设置跨行(Grid.RowSpan属性)和跨列(Grid.ColumnSpan属性)。

<Grid>
<Grid.RowDefinitions>
<!--定义行,每个RowDefinition都是一行-->
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="2*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<!--定义列,每一个ColumnDefinition都是一列-->
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Button Content="Button" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="top" Width="75" />
<Button Content="Button" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="top" Width="75"/>
<Button Content="Button" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="top" Width="75" />
<Button Content="Button" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="top" Width="75" />
<Button Content="Button" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="top" Width="75"/>
<Button Content="Button" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left" VerticalAlignment="top" Width="75" />
</Grid>

Grid

16、GridSplitter 分割线

17、GroupBox 具有标题的容器盒子

18、Image 图片控件 source属性设置图片路径

19、Label 文本标签 不支持换行 Content属性内为显示的文本

20、ListBox 列表选择组件,可以横向也可以竖向,能获取选中值。可使用Separator控件做分隔符。

21、ListView 列表视图。分视图显示方式( <ListView.View>,里面放ViewBase类型的控件,如GridView控件,只能放一个)和数据源( <ListView.ItemsSource>)两个部分。如果只是显示数据的,单用GridView就行了,所以这个常用与一个数据源,存在多个View的情况。提供右键菜单。因为涉及后台代码,在这里,不提供demo,可以参考微软的demo:http://download.microsoft.com/download/B/2/5/B25C4C6A-97FE-4014-9D4B-B39607BA9A12/wpf_samples/ListViewCustomView.exe。

22、MediaElement 播放视频音频,默认是界面上什么都没有,需要再代码中调用Play()方法才会播放。

23、Menu 菜单栏,一般放在顶部,如vs顶部,标题下面那排。

24、PasswordBox 密码输入框。输入内容显示为*******

25、ProgressBar 进度条。value属性表示进度,范围0-100

26、RadioButton 单选按钮

27、Rectangle 实心矩形

28、RichTextBox 富文本输入框

29、ScrollBar 滚动条。没见过单独用的,一般都直接再外面套一个ScrollViewer

30、ScrollViewer 带滚动条的容器。

<ScrollViewer HorizontalAlignment="Stretch"  Name="MapscrollViewer" VerticalAlignment="Stretch" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" >
<ScrollViewer.Content>
<Image Name="Map"></Image>
</ScrollViewer.Content>
</ScrollViewer>

ScrollViewer中展示图片

小细节,ScrollViewer的大小和ScrollViewer.Content的大小不一致,存在间隔。

31、Separtor 竖向分隔线,可以用于ToolBar中分隔按钮组。

32、Slider 滑动条,当用户关注相对大小,而不是具体的数字时使用。常用语音量控制等。

33、StackPanel 堆叠容器。子控件每个都占一行或一列。Orientation属性设置横向Horizontal和竖向Vertical

34、StatusBar 状态栏,一般放在底部,显示各种状态信息,如VS下面那排。

35、TabControl tab选项卡和对应容器

36、TextBlock 文本块  Text属性为显示内容,TextWrapping="Wrap"表示换行显示文本。

37、TextBox 文本框,基本控件,没什么好解释的

<TextBlock Name="coordinate" HorizontalAlignment="Stretch" VerticalAlignment="Bottom"></TextBlock>

TextBox

38、ToolBar 工具栏,单独用时独占一行。

39、TolBarPanel 继承自StackPanel,工具栏容器。

40、ToolBarTray 工具栏集合,当有多个工具栏时使用。内部的ToolBar不再独占一行。

41、TreeView 树形视图。

  <TreeView>
<TreeViewItem Header="常用WPF控件" IsExpanded="True">
<TreeViewItem Header="指针" />
<TreeViewItem Header="Border" />
<TreeViewItem Header="Button" />
<TreeViewItem Header="CheckBox" />
<TreeViewItem Header="ComboBox" />
<TreeViewItem Header="Grid" />
<TreeViewItem Header="Image" />
<TreeViewItem Header="Label" />
</TreeViewItem>
<TreeViewItem Header="所有WPF控件" IsExpanded="True">
<TreeViewItem Header="指针" />
<TreeViewItem Header="Border" />
<TreeViewItem Header="Button" />
<TreeViewItem Header="Canvas" />
<TreeViewItem Header="CheckBox" />
<TreeViewItem Header="ComboBox" />
<TreeViewItem Header="ContentControl" />
<TreeViewItem Header="DockPanel" />
<TreeViewItem Header="Grid" />
<TreeViewItem Header="Image" />
<TreeViewItem Header="Label" />
</TreeViewItem>
<TreeViewItem Header="常规" />
</TreeView>

TreeView

42、Viewbox 主要为子控件提供拉伸,缩放等功能。感觉没什么卵用,子控件都有Stretch属性控制拉伸的。

43、WebBrowser 内置Web浏览器(IE内核,不装IE不能用)

44、WindowsFormsHost 这个里面支持WinForm控件。

45、WrapPanel 包裹块装元素的容器。子控件是一块一块的,从左往右排列,如果超过右边框,则换行;超过下边界,则隐藏。

    <WrapPanel Height="291" Width="542">
<Calendar/>
<Calendar/>
<Calendar/>
<Calendar/>
</WrapPanel>

WrapPanel

默认不能看到的控件

1、文档

DocumentViewerBase 提供用于显示固定内容或流动内容(分别由 System.Windows.Documents.FixedDocument 或 System.Windows.Documents.FlowDocument 表示)的查看器的基类。

DocumentPageView 表示已分页 System.Windows.Documents.DocumentPage 的视区。

FlowDocumentPageViewer 表示一个用于在固定查看模式下查看流内容的控件,该模式一次显示一页内容。

FlowDocument 用高级文档功能(如分页和列)承载流内容和设置流内容格式。 定义一个文档,文档样式。

【WPF】1、 基本控件的简介的更多相关文章

  1. WPF中Ribbon控件的使用

    这篇博客将分享如何在WPF程序中使用Ribbon控件.Ribbon可以很大的提高软件的便捷性. 上面截图使Outlook 2010的界面,在Home标签页中,将所属的Menu都平铺的布局,非常容易的可 ...

  2. WPF 调用WinForm控件

    WPF可以使用WindowsFormsHost控件做为容器去显示WinForm控件,类似的用法网上到处都是,就是拖一个WindowsFormsHost控件winHost1到WPF页面上,让后设置win ...

  3. InteropBitmap指定内存,绑定WPF的Imag控件时刷新问题。

    1.InteropBitmap指定内存,绑定WPF的Imag控件的Source属性 创建InteropBitmap的时候,像素的格式必须为PixelFormats.Bgr32, 如果不是的话在绑定到I ...

  4. 在WPF程序中将控件所呈现的内容保存成图像(转载)

    在WPF程序中将控件所呈现的内容保存成图像 转自:http://www.cnblogs.com/TianFang/archive/2012/10/07/2714140.html 有的时候,我们需要将控 ...

  5. 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件

    原文:[WPF]监听WPF的WebBrowser控件弹出新窗口的事件 WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗 ...

  6. 在WPF的WebBrowser控件中抑制脚本错误

    原文:在WPF的WebBrowser控件中抑制脚本错误 今天用WPF的WebBrowser控件的时候,发现其竟然没有ScriptErrorsSuppressed属性,导致其到处乱弹脚本错误的对话框,在 ...

  7. 浅尝辄止WPF自定义用户控件(实现颜色调制器)

    主要利用用户控件实现一个自定义的颜色调制控件,实现一个小小的功能,具体实现界面如下. 首先自己新建一个wpf的用户控件类,我就放在我的wpf项目的一个文件夹下面,因为是一个很小的东西,所以就没有用mv ...

  8. WPF 滚动文字控件MarqueeControl

    原文:WPF 滚动文字控件MarqueeControl WPF使用的滚动文字控件,支持上下左右滚动方式,支持设置滚动速度 XAML部分: <UserControl x:Class="U ...

  9. 深入探讨WPF的ListView控件

    接上一篇博客初步探讨WPF的ListView控件(涉及模板.查找子控件)  我们继续探讨ListView的用法      一.实现排序功能 需求是这样的:假如我们把学生的分数放入ListView,当我 ...

  10. WPF中查找控件的扩展类

    在wpf中查找控件要用到VisualTreeHelper类,但这个类并没有按照名字查找控件的方法,于是搜索网络,整理出下面这个类,感觉用起来很是方便. 贴出来,供大家参考. /// <summa ...

随机推荐

  1. WTL 9.0的变化 - atlcrack.h

    atlcrack.h中是一些对消息映射的简化,9.0版本中只增加了一个WM_MOUSEWHEEL的响应,而且要求windows vista. #if (_WIN32_WINNT >= 0x060 ...

  2. 第12节-BLE协议HCI层的数据格式

    学习资料: 1. 蓝牙协议core_v5.0.pdf <Vol 2: Core System Package [BR/EDR Controller volume]>的“Part E: Ho ...

  3. SpringBoot全局Jackson配置未生效

    在做一个小项目,后台服务第一次用SpringBoot构建.接口使用Json格式,在application.properties中配置如下: spring.jackson.default-propert ...

  4. Kdevelop的C++断点调试设置

    1. CMakeLists.txt 需要设置为 Debug 模式 示例 cmake_minimum_required(VERSION 2.8) Project (Eigen_test) include ...

  5. VIJOS-P1199 核弹危机

    JDOJ 1347: VIJOS-P1199 核弹危机 题目传送门 Description shibowen和ganggang正在玩红警,可不料shibowen造出了核弹正要发射......(gang ...

  6. Softmax与Sigmoid函数的联系

    译自:http://willwolf.io/2017/04/19/deriving-the-softmax-from-first-principles/ 本文的原始目标是探索softmax函数与sig ...

  7. mac下操作小记

    安装homebrew https://juejin.im/post/5c738bacf265da2deb6aaf97 主要问题:按官网安装方法(/usr/bin/ruby -e "$(cur ...

  8. 一元n次方程为什么至多有n个实根

    任意一个n次多项式都可以分解成n个一次多项式的乘积.例如,对于三次多项式来说,那就可以分成三个一次式的乘积,也就是说,三次方程最多有三个根. 需要注意的是,最少的话可能一个实根都没有,如\(f(x)= ...

  9. 计算GPS点之间的距离

    latitude纬度 longtitude经度 // 求弧度 double getRadian(double d) { return d * PI / 180.0; //角度1? = π / 180 ...

  10. 每日一问:你了解 Java 虚拟机结构么?

    对于从事 C/C++ 程序员开发的小伙伴来说,在内存管理领域非常头疼,因为他们总是需要对每一个 new 操作去写配对的 delete/free 代码.而对于我们 Android 乃至 Java 程序员 ...