WPF(C#)学习日志1:样式与布局

一.样式

在 WPF(Windows Presentation Foundation)中,样式(Style)是一种定义控件外观和行为的机制。通过样式,您可以定义控件的属性,如背景、前景、字体样式、边框等,并将这些属性应用于一个或多个控件。

如果不通过样式,我们在生命标签对时,需要在每个标签对中都声明大量的属性,比如说我们要声明四个文本,代码如下:

 <Grid>
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <TextBlock Text="Text1" FontFamily="宋体" FontSize="18" Foreground="Red" FontWeight="Bold"/>
            <TextBlock Text="Text2" FontFamily="宋体" FontSize="18" Foreground="Red" FontWeight="Bold"/>
            <TextBlock Text="Text3" FontFamily="宋体" FontSize="18" Foreground="Red" FontWeight="Bold"/>
            <TextBlock Text="Text4" FontFamily="宋体" FontSize="18" Foreground="Red" FontWeight="Bold"/>
         </StackPanel>

    </Grid>

 运行结如下图所示,可以看到四个红色的文本。

为了避免在标签对中出现大量重复的内容我们重新定义样式,代码如下:

    <Window.Resources>
        
        <Style x:Key="text2" TargetType="{x:Type TextBlock}" >
            <!-- TargetType 说明属性应用的类型  -->
            <Setter Property="FontFamily" Value="宋体"/>
            <Setter Property="FontSize" Value="18"/>
            <Setter Property="Foreground" Value="Red"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
               
    </Window.Resources>
        
    <Grid>
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <TextBlock Text="Text1" Foreground="BlueViolet"  Style="{StaticResource text2}"/>
            <TextBlock Text="Text2" Style="{StaticResource text2}"/>
            <TextBlock Text="Text3" Style="{StaticResource text2}"/>
            <TextBlock Text="Text4" Style="{StaticResource text2}"/>
        </StackPanel>
    </Grid>

样式定义在<Window.Resources>包裹的标签对当中,TargetType关键字定义该样式作用的组件类型,我们要定义文本的样式,这里便直接选择文本。同时,应用样式时支持就近原则,即重复定义的属性会有优先<Grid>当中的的属性为准,上段代码中的运行结果如下图所示:

 因为我们在后面的标签对中定义了紫色,所以会覆盖样式之中的红色。

二.布局

布局是一种用于安排和组织控件在用户界面中位置和大小的机制。WPF提供了多种布局容器,每个容器都具有不同的布局方式和特性,以满足各种布局需求。

下是WPF中常用的布局容器及其简要介绍:

Grid(网格布局):Grid 是最常用的布局容器之一,它将控件划分为行和列的网格,并可以在网格单元中放置控件。Grid 具有灵活的布局能力,可以使用行和列的定义来确定控件的位置和大小。

<Grid.RowDefinitions>和<Grid.ColumnDefinitions>定义每个Grid当中的行数和列数,测试代码如下:


    <Grid>
        <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <!-- 第一行,自动调整高度 -->
                <RowDefinition Height="*"/>
                <!-- 第二行,占据剩余空间 -->
                <RowDefinition Height="100"/>
                <!-- 第三行,固定高度为100 -->
            </Grid.RowDefinitions>
        
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <!-- 第一列,自动调整宽度 -->
                <ColumnDefinition Width="*"/>
                <!-- 第二列,占据剩余空间 -->
                <ColumnDefinition Width="200"/>
                <!-- 第三列,固定宽度为200 -->
            </Grid.ColumnDefinitions>

            <!-- 在 Grid 中放置控件 -->
            <Button Grid.Row="0" Grid.Column="0" Content="Button 1"/>
            <Button Grid.Row="1" Grid.Column="1" Content="Button 2"/>
        <Button Grid.Row="2" Grid.Column="2" Content="Button 3"/>
    </Grid>

输入的结果图如下:

 其他的布局使用的较少,之后会在使用的过程当中补充实例代码

StackPanel(堆栈布局):StackPanel 按照水平或垂直方向依次排列其子元素。它可用于创建简单的布局,其中控件按顺序堆叠在一起。

WrapPanel(自动换行布局):WrapPanel 与 StackPanel 类似,但它具有自动换行的特性。当空间不足时,WrapPanel 会将子元素自动放置到下一行或下一列

DockPanel(停靠布局):DockPanel 将其子元素停靠在容器的边缘或中心位置。子元素可以停靠在顶部、底部、左侧、右侧或中间位置,并可以指定停靠的顺序

Canvas(画布布局):Canvas 允许您以绝对位置坐标放置子元素。您可以使用 Canvas.Left、Canvas.Top 等属性来指定子元素在画布上的位置。

UniformGrid(均匀网格布局):UniformGrid 将其子元素平均分配到一个网格中。您可以指定行数、列数和子元素的对齐方式。

WrapGrid(换行网格布局):WrapGrid 类似于 UniformGrid,但它支持换行。它可以将子元素按照指定的行数和列数进行排列,并在空间不足时自动换行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF编程宝典——使用C# 2008和.NET 3.5(第2版)英文版 目录 第1章 WPF概述 1 1.1 理解Windows图形 1 1.1.1 DirectX:新的图形引擎 1 1.1.2 硬件加速与WPF 2 1.2 WPF:高级API 4 1.2.1 分辨率无关性 5 1.2.2 WPF的演化 9 1.2.3 Windows窗体将继续保留 11 1.2.4 DirectX也将继续保留 12 1.2.5 Silverlight 12 1.3 WPF体系结构 13 1.4 结束语 17 第2章 XAML 19 2.1 理解XAML 20 2.1.1 WPF之前的图形用户界面 20 2.1.2 XAML变体 21 2.1.3 XAML编译 22 2.2 XAML基础 22 2.2.1 XAML名称空间 23 2.2.2 后台代码类 24 2.3 XAML中的属性和事件 26 2.3.1 简单属性与类型转换器 27 2.3.2 复杂属性 29 2.3.3 标记扩展 30 2.3.4 附加属性 31 2.3.5 嵌套元素 32 2.3.6 特殊字符与空白字符 35 2.3.7 事件 36 2.3.8 完整的Eight Ball示例程序 38 2.4 使用其他名称空间中的类型 38 2.5 加载和编译XAML 40 2.5.1 只使用代码 41 2.5.2 使用代码和未编译的XAML 43 2.5.3 使用代码和编译过的XAML 44 2.5.4 只使用XAML 46 2.6 结束语 47 第3章 Application类 48 3.1 应用程序的生命周期 48 3.1.1 创建Application对象 48 3.1.2 派生一个自定义的 Application类 49 3.1.3 应用程序的关闭方式 51 3.1.4 应用程序事件 51 3.2 Application类的任务 53 3.2.1 处理命令行参数 54 3.2.2 访问当前Application对象 55 3.2.3 在窗口之间进行交互 56 3.2.4 单实例应用程序 57 3.3 结束语 63 第4章 布局 64 4.1 理解WPF中的布局 64 4.1.1 WPF布局原则 65 4.1.2 布局过程 66 4.1.3 布局包容器 66 4.2 使用StackPanel面板 进行简单布局 68 4.2.1 布局属性 69 4.2.2 对齐方式 70 4.2.3 外边距 71 4.2.4 最小尺寸、最大尺寸以及 显式地设置尺寸 72 4.3 WrapPanel面板和DockPanel 面板 74 4.3.1 WrapPanel面板 74 4.3.2 DockPanel面板 75 4.3.3 嵌套布局包容器 77 4.4 Grid面板 78 4.4.1 调整行和列 80 4.4.2 跨越行和列 82 4.4.3 分割窗口 83 4.4.4 共享尺寸组 86 4.4.5 UniformGrid面板 88 4.5 使用Canvas面板进行 基于坐标的布局 89 4.5.1 Z顺序 90 4.5.2 lnkCanvas元素 91 4.6 布局示例 93 4.6.1 列设置 93 4.6.2 动态内容 94 4.6.3 组合式用户界面 96 4.7 结束语 97 第5章 内容 99 5.1 理解内容控件 99 5.1.1 Content属性 101 5.1.2 对齐内容 102 5.1.3 WPF内容原则 103 5.2 特殊包容器控件 104 5.2.1 ScrollViewer包容器控件 104 5.2.2 GroupBox和TabItem: 带标题的内容控件 107 5.2.3 Expander控件 109 5.3 装饰控件 112 5.3.1 Border控件 112 5.3.2 Viewbox控件 113 5.4 结束语 115 第6章 依赖项属性和路由事件 116 6.1 理解依赖项属性 116 6.1.1 定义和注册依赖项属性 117 6.1.2 WPF使用依赖项属性的方式 124 6.2 理解路由事件 126 6.2.1 定义和注册路由事件 126 6.2.2 关联事件处理程序 128 6.2.3 事件路由 129 6.3 WPF事件 137 6.3.1 生命周期事件 137 6.3.2 输入事件 139 6.3.3 键盘输入 140 6.3.4 鼠标输入 145 6.4 结束语 149 第7章
WPF中,我们可以使用Canvas控件和Shape类来绘制一个与Canvas对称的尺子。以下是一个简单的示例代码: ```csharp <Canvas> <Line X1="0" Y1="0" X2="100" Y2="0" Stroke="Black" StrokeThickness="1"/> <TextBlock Canvas.Left="2" Canvas.Top="2" Text="0"/> <Line X1="0" Y1="0" X2="0" Y2="100" Stroke="Black" StrokeThickness="1"/> <TextBlock Canvas.Left="2" Canvas.Top="102" Text="0"/> <Line X1="0" Y1="50" X2="100" Y2="50" Stroke="Black" StrokeThickness="1"/> <TextBlock Canvas.Left="2" Canvas.Top="48" Text="0.5"/> <Line X1="50" Y1="0" X2="50" Y2="100" Stroke="Black" StrokeThickness="1"/> <TextBlock Canvas.Left="48" Canvas.Top="102" Text="0.5"/> <Line X1="0" Y1="10" X2="20" Y2="10" Stroke="Black" StrokeThickness="1"/> <TextBlock Canvas.Left="22" Canvas.Top="8" Text="1"/> <Line X1="10" Y1="0" X2="10" Y2="20" Stroke="Black" StrokeThickness="1"/> <TextBlock Canvas.Left="8" Canvas.Top="22" Text="1"/> </Canvas> ``` 在这个示例中,我们使用四条水平和四条垂直的线条来绘制尺子的刻度,使用TextBlock控件在相应位置添加标签。我们还使用Canvas控件来定位这些元素。 要使用这个尺子,只需将这段代码添加到您的XAML文件中即可: ```csharp <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="450" Width="800"> <Canvas> <!-- 尺子代码 --> </Canvas> </Window> ``` 这将在窗口上添加一个名为Canvas的控件,并在其中绘制尺子。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值