WPF(Windows Presentation Foundation)与 C# 基础知识详解

一、引言

WPF 是由微软开发的新一代用户界面框架,它为 Windows 应用程序提供了强大而灵活的 UI 设计和开发能力。C# 作为一种现代、简洁且功能强大的编程语言,是开发 WPF 应用程序的首选语言。本文将全面深入地介绍 WPF 和 C# 的基础知识,涵盖从基础概念到实际应用的多个方面,旨在帮助读者快速掌握 WPF 应用开发的核心技能。

二、C# 基础

(一)数据类型

  1. 值类型
    • 整数类型 :包括 byte(0 - 255)、short(-32768 到 32767)、int(-2147483648 到 2147483647)、long(-9223372036854775808 到 9223372036854775807)等,用于存储整数值。
    • 浮点类型float(单精度,大约 7 位有效数字)和 double(双精度,大约 15 - 17 位有效数字),用于处理小数。
    • 字符类型char 用于表示单个 Unicode 字符,如 'a''中' 等。
    • 布尔类型bool 只有两个值 truefalse,常用于条件判断。
  2. 引用类型
    • :是面向对象编程的核心,用于封装数据和行为。例如:
cs 复制代码
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public void Introduce()
    {
        Console.WriteLine($"My name is {Name}, and I'm {Age} years old.");
    }
}
  • 接口:定义了一组方法和属性的签名,类可以实现接口来提供具体的实现。
  • 数组 :用于存储相同类型的多个元素,如 int[] numbers = { 1, 2, 3 };

(二)控制流语句

  1. 条件语句
    • if-else:根据条件的真假执行不同的代码块。例如:
cs 复制代码
int num = 10;
if (num > 5)
{
    Console.WriteLine("The number is greater than 5.");
}
else
{
    Console.WriteLine("The number is less than or equal to 5.");
}
  • switch:根据一个表达式的值来选择执行不同的分支。
cs 复制代码
int day = 3;
switch (day)
{
    case 1:
        Console.WriteLine("Monday");
        break;
    case 2:
        Console.WriteLine("Tuesday");
        break;
    case 3:
        Console.WriteLine("Wednesday");
        break;
    default:
        Console.WriteLine("Other day");
        break;
}
  1. 循环语句
    • for:用于执行固定次数的循环。
cs 复制代码
for (int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}
  • while:只要条件为真就执行循环。
cs 复制代码
int count = 0;
while (count < 3)
{
    Console.WriteLine(count);
    count++;
}
  • do-while:先执行一次循环体,然后再检查条件。
cs 复制代码
int num2 = 0;
do
{
    Console.WriteLine(num2);
    num2++;
} while (num2 < 2);

(三)方法和函数

  1. 方法定义:方法是类或结构中包含的一段可执行代码。
cs 复制代码
class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}
  1. 方法重载:允许在同一个类中定义多个同名但参数列表不同的方法。
cs 复制代码
class MathUtils
{
    public int Add(int a, int b)
    {
        return a + b;
    }
    public double Add(double a, double b)
    {
        return a + b;
    }
}

三、WPF 基础

(一)WPF 应用程序结构

  1. 项目文件 :WPF 项目通常包含 .csproj 文件,它定义了项目的配置信息,如引用的程序集、源文件等。
  2. App.xaml :应用程序的入口点,包含应用程序级别的资源和启动逻辑。例如,可以在 App.xaml.cs 中设置应用程序的主窗口:
cs 复制代码
public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        MainWindow mainWindow = new MainWindow();
        mainWindow.Show();
    }
}
  1. MainWindow.xaml:主窗口的 XAML 定义,用于描述窗口的外观和布局。XAML(可扩展应用程序标记语言)是一种用于构建 WPF 用户界面的声明性语言。

(二)控件基础

  1. Button:按钮控件,用于触发操作。在 XAML 中定义按钮:
XML 复制代码
<Button Content="Click Me" Click="Button_Click" />

在对应的代码隐藏文件(MainWindow.xaml.cs)中处理按钮点击事件:

cs 复制代码
private void Button_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Button clicked!");
}
  1. TextBox:文本框控件,用于输入和显示文本。
XML 复制代码
<TextBox Name="InputTextBox" />

可以通过代码访问文本框中的文本:

cs 复制代码
string inputText = InputTextBox.Text;
  1. Label:标签控件,用于显示文本信息。
XML 复制代码
<Label Content="This is a label" />

(三)布局控件

  1. Grid:网格布局,将界面划分为行和列的单元格,控件可以放置在指定的单元格中。
XML 复制代码
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Button Content="Button 1" Grid.Row="0" Grid.Column="0" />
    <TextBox Grid.Row="0" Grid.Column="1" />
</Grid>
  1. StackPanel:按顺序排列子控件,分为水平和垂直两种排列方式。
XML 复制代码
<StackPanel Orientation="Vertical">
    <Button Content="Button 2" />
    <Button Content="Button 3" />
</StackPanel>
  1. WrapPanel:当子控件超出其宽度或高度时,会自动换行或换列排列。

四、数据绑定

  1. 基本概念:数据绑定是 WPF 的一个强大特性,它允许将 UI 元素与数据源(如对象的属性)进行关联,当数据源发生变化时,UI 会自动更新。
  2. 简单数据绑定示例 :假设有一个 Person 类:
cs 复制代码
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

在 XAML 中绑定到 Person 对象的属性:

XML 复制代码
<StackPanel>
    <TextBlock Text="{Binding Name}" />
    <TextBlock Text="{Binding Age}" />
</StackPanel>

在代码隐藏文件中设置数据上下文:

cs 复制代码
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Person person = new Person { Name = "John", Age = 30 };
        DataContext = person;
    }
}

五、样式和模板

  1. 样式:用于定义控件的外观和行为的集合。可以在 XAML 中定义全局样式或局部样式。
XML 复制代码
<Window.Resources>
    <Style TargetType="Button">
        <Setter Property="Background" Value="LightBlue" />
        <Setter Property="Foreground" Value="White" />
    </Style>
</Window.Resources>
<Button Content="Styled Button" />
  1. 模板:用于定义控件的可视化结构。例如,自定义按钮的模板:
XML 复制代码
<Style TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        CornerRadius="5">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

六、事件处理

  1. 路由事件:WPF 中的事件是路由事件,它可以在可视化树中向上或向下传播。例如,按钮的点击事件是一个路由事件。
  2. 事件处理方式:可以在 XAML 中直接指定事件处理方法,也可以在代码中动态注册事件处理方法。
XML 复制代码
<Button Content="Event Button" Click="EventButton_Click" />
cs 复制代码
private void EventButton_Click(object sender, RoutedEventArgs e)
{
    // 处理按钮点击事件
}

七、依赖属性

  1. 概念:依赖属性是 WPF 中一种特殊的属性,它可以从父元素继承值,支持样式、数据绑定和动画等功能。
  2. 定义依赖属性 :以自定义 MyDependencyProperty 为例:
cs 复制代码
public class MyUserControl : UserControl
{
    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty", typeof(string), typeof(MyUserControl),
        new FrameworkPropertyMetadata("Default value"));

    public string MyProperty
    {
        get { return (string)GetValue(MyPropertyProperty); }
        set { SetValue(MyPropertyProperty, value); }
    }
}

八、结语

通过对 WPF 和 C# 基础知识的全面介绍,我们了解了 C# 的基本数据类型、控制流语句、方法等,以及 WPF 的应用程序结构、控件、布局、数据绑定、样式模板、事件处理和依赖属性等核心内容。这些知识是开发 WPF 应用程序的基础,掌握好它们将为进一步深入学习和开发复杂的 WPF 应用程序打下坚实的基础。在实际开发中,还需要不断实践和积累经验,以提高开发效率和应用程序的质量。

相关推荐
她说彩礼65万1 小时前
WPF ContentTemplate
microsoft·wpf
hhcyyds16 小时前
【C#】变量和常量
c#
她说彩礼65万7 小时前
WPF 附加属性
wpf
qq_340474027 小时前
5.1 WPF路由事件以及文本样式
前端·c#·wpf
想做后端的小C8 小时前
C#面向对象 一些细节
c#
她说彩礼65万11 小时前
WPF ControlTemplate和DataTemplate
wpf
有人说风轻的像雨11 小时前
c#的反射和特性
c#
鲤籽鲲12 小时前
C# SerialPort 类中清空缓存区的方法
开发语言·c#·上位机
玉面小君13 小时前
WPF中的Adorner基础用法详解与实例
wpf
CoderIsArt13 小时前
C#中3维向量的实现
开发语言·c#