编辑
2025-11-08
C#
00

"公司要求项目升级到WPF,但是我完全摸不着头脑。连个简单的日期控件都不知道怎么用了!"这话让我想起了自己当年的转型经历。据统计,超过60%的.NET桌面开发者仍在使用WinForm,但随着现代化UI需求的增长,WPF转型已经成为必然趋势。

今天我们就从最常用的DatePicker控件入手,让你彻底掌握WPF开发的核心思路,告别转型焦虑!

🔍 痛点分析:为什么WinForm开发者转WPF这么难?

很多WinForm开发者在转型时都会遇到这些问题:

  • 思维方式转变:从代码驱动界面到XAML声明式开发
  • 数据绑定困惑:不理解双向绑定和MVVM模式
  • 样式定制迷茫:不知道如何自定义控件外观

其实,核心问题就是没有掌握WPF的设计哲学

💡 解决方案:5个实战技巧让你快速上手

🎯 技巧1:基础使用对比,建立认知桥梁

WinForm中的做法:

C#
// 传统WinForm方式 dateTimePicker1.Value = DateTime.Now; var selectedDate = dateTimePicker1.Value;

WPF中的新思路:

XML
<Window x:Class="AppDateTimePicker.MainWindow" 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" xmlns:local="clr-namespace:AppDateTimePicker" mc:Ignorable="d" xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="MainWindow" Height="450" Width="800"> <Window.Resources> <sys:DateTime x:Key="now"> </sys:DateTime> </Window.Resources> <StackPanel Margin="20"> <!-- 实时显示选中日期 --> <TextBlock Text="{Binding ElementName=myDatePicker, Path=SelectedDate, StringFormat='选中日期:{0:yyyy-MM-dd}'}" FontSize="16" Margin="0,0,0,10" /> <!-- DatePicker控件 --> <DatePicker x:Name="myDatePicker" SelectedDate="{x:Static sys:DateTime.Now}" Width="150" /> </StackPanel> </Window>

image.png

编辑
2025-11-08
C#
00

还在用传统的WinForm写桌面应用?看着别人家的界面炫酷到飞起,你是不是也想试试?

据统计,超过70%的.NET桌面开发者仍在使用WinForm,但随着用户对界面体验要求越来越高,WPF已经成为现代桌面应用开发的首选。很多开发者担心转型成本太高,其实掌握正确方法,3天就能上手!

今天就以Calendar控件为例,带你体验从WinForm到WPF的华丽转身,让你的应用界面瞬间提升一个档次!

🎯 为什么必须要转WPF?

💡 三大核心优势让你无法拒绝

1. 界面定义更灵活

  • XAML让布局变得像搭积木一样简单
  • 数据绑定、动画、模板,想要什么效果就有什么效果

2. 可定制性超强

  • 样式(Style)和控制模板(ControlTemplate)
  • 改变外观无需动后端逻辑,真正做到前后端分离

3. MVVM模式天然支持

  • 数据绑定减少界面与业务逻辑耦合
  • 代码结构更清晰,维护成本大幅降低

🚀 Calendar控件实战:从入门到精通

📝 最简单的开始:基础用法

还记得WinForm中拖拽控件的日子吗?WPF中用XAML更优雅:

XML
<Window x:Class="AppCalendar.MainWindow" 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" xmlns:local="clr-namespace:AppCalendar" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid Margin="10"> <!-- 基础Calendar控件 --> <Calendar Name="myCalendar" /> </Grid> </Window>
编辑
2025-11-08
C#
00

从 WinForm 到 WPF 的转换是许多开发者在现代化 UI 需求下的必经之路。WPF(Windows Presentation Foundation)相较于 WinForm 在界面渲染和布局上有更强大的能力,可以更灵活地使用 XAML 来打造界面,真正实现 UI 与业务逻辑分离。下面将重点阐述如何在 WPF 中使用 Image 控件及其样式,以帮助你完成 WinForm 到 WPF 的转型。

基础概念与差异

在 WinForm 中,图片往往使用 PictureBox 控件去展示。在 WPF 中,展示图像的控件是 Image。相比 WinForm 的 PictureBoxImage 控件在布局、绘制机制以及样式化等方面更具弹性。

  • WinForm:
    • PictureBox 负责显示图片。
    • 通过 PictureBoxSizeMode 控制缩放和填充,如 AutoSize, StretchImage, Zoom 等。
  • WPF:
    • Image 控件用于显示图片。
    • 通过 StretchStretchDirection 属性控制缩放行为。
    • 采用 XAML 的方式进行配置,灵活运用绑定和样式资源。

一个简单的 Image 示例

下面的示例展示了在 XAML 中使用 Image 控件,显示一张本地图片并设置最基本的拉伸和排列方式。

XML
<Window x:Class="AppImage.MainWindow" 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" xmlns:local="clr-namespace:AppImage" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Image Source="Images/flask.png" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform" Width="200" Height="200"/> </Grid> </Window>

image.png

编辑
2025-11-08
C#
00

在 WinForm 中,ListBox 主要用来显示一个简单的列表,可通过 Items 属性进行增删改查。然而在 WPF 中,ListBox 不仅可以绑定数据,还可以通过丰富的样式和模板系统来实现高度的自定义。下面将带大家从 WinForm 过渡到 WPF,看看如何使用和美化 ListBox

基础:WinForm 和 WPF 中的 ListBox 对比

  • WinForm
    • 往往通过 listBox1.Items.Add(item) 等方式添加数据
    • 样式大多依赖于系统的默认 UI
  • WPF
    • 通常结合 数据绑定 (DataBinding)MVVM 模式
    • 利用 数据模板 (DataTemplate)样式 (Style) 来灵活地定义外观
    • 更容易实现复杂的交互与视觉效果

简单示例:绑定字符串列表

以下示例展示了如何使用 XAML 绑定一个字符串列表到 ListBox

XML
<Window x:Class="AppListBox.MainWindow" 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" xmlns:local="clr-namespace:AppListBox" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <!-- 将ListBox的ItemsSource绑定到ViewModel或后台代码里的字符串集合 --> <ListBox x:Name="myListBox" /> </Grid> </Window>
编辑
2025-11-08
C#
00

在从WinForm转型到WPF的过程中,ComboBox是一个常见的控件。虽然在WinForm中也存在ComboBox,但WPF中强大的数据绑定与可视化样式能力,为我们提供了更灵活的开发方式。本文将从以下几个方面来介绍WPF中的ComboBox用法及样式自定义。

WinForm与WPF ComboBox的主要区别

  • 概念差异

    WinForm中的ComboBox通常以“添加项(Items.Add)”方式或DataSource绑定方式。WPF中我们更常使用数据绑定(Binding)和XAML配置,摆脱纯手动代码操作。

  • 布局与界面定义

    WinForm通过拖拽控件到Form上进行布局。而WPF则可使用XAML进行布局,借助布局容器(如StackPanel、Grid等)实现更灵活的界面组合与动态变化。

  • 样式与模板

    在WinForm中,如果要自定义ComboBox的外观,需要修改属性或借助第三方控件。WPF则可以使用ControlTemplate和DataTemplate在XAML中直接定义视觉外观。

基础用法示例

基本XAML写法

下面是一个在WPF中声明ComboBox的最基础示例:

XML
<Window x:Class="AppComboBox.MainWindow" 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" xmlns:local="clr-namespace:AppComboBox" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <ComboBox Name="comboBoxBasic" Width="200" VerticalAlignment="Top" SelectedIndex="0"> <!-- 直接在XAML中添加选项 --> <ComboBoxItem>选项一</ComboBoxItem> <ComboBoxItem>选项二</ComboBoxItem> <ComboBoxItem>选项三</ComboBoxItem> </ComboBox> </Grid> </Window>

image.png