窗体
- 无边框
窗体无边框(最大化及标题位置)WindowStyle="None"
窗体透明 AllowsTransparency="True",必须设置窗体无边框,否则报错
SizeToContent属性,窗体大小可以根据内容自动调整,多语言版本时一般会使用
我习惯性的设置Window窗体的样式如下:
<Border Margin="5" Background="#EEE" CornerRadius="5" MouseLeftButtonDown="Border_MouseLeftButtonDown">
<Border.Effect>
<DropShadowEffect BlurRadius="10" Direction="0" Opacity="0.3" ShadowDepth="0" Color="Gray" />
</Border.Effect>
<Grid Margin="10" />
</Border>
这里有个知识点需要强调一下:
Border的属性Background="{x:Null}" 和Background="Transparent" 的区别,前者设置之后,会导致无法获取到Border的一些事件,所以一般都会使用后者,特殊场景除外。
- 异形窗口
关键属性Clip:根据集合图形进行窗口剪切
<Window.Clip>
<RectangleGeometry Rect="20,20,100,50" />
<!--<EllipseGeometry RadiusX="80" RadiusY="40" Center="50,50"/>-->
</Window.Clip>
也可使用PathGeometry实现各种自定义形状的异形窗体创建
布局控件
- 布局的一些原则
- 不使用显示的方式设定元素的尺寸(常见的就是在多语言版本软件切换时)
- 不使用坐标定位置
- 布局容器的子元素共享可用空间
- 可嵌套容器
布局控件
- Border:装饰控件,不是严格意义上的布局控件。同类型的还有Viewbox(对布局内的子控件进行等比缩放)
- StackPanel:实现单行或者单列展示子控件
- DockPanel:具有停靠功能,给子控件增加了附加属性(停靠方式,依次设置子控件布局)
- WrapPanel:唯一一个不能被Grid替代的布局控件,先行后列/先列后行的形式进行布局(会换行)
- Grid:布局应用最广的控件,可以设置行列网格也可以不设置,将子控件包裹起来形成一个整体,为子控件增加附加属性(用来设置行列位置)
- UniformGrid:直接通过属性定义行列数量 Rows="4" Columns="3",子元素按照行列自动填充。如果不设置行列属性,会按照n*n的形式进行自动布局行列
- Canvas:在业务界面使用比较少,一般在做鼠标操作比较多的界面中或者自定义控件中比较常用
- InkCanvas:支持笔画输入等操作,不属于布局控件