2026-10-18-WPFUIGallery2

2026-10-18-WPFUIGallery2

十月 18, 2026

WPFUIGallery2

WPF中有一个重要概念Trigger 俗称:触发器

可以根据状态来自动的改变外观。

1
2
3
4
5
6
7
8
9
<Style x:Key="NameInputStyle" TargetType="TextBox">
<Setter Property="BorderThickness" Value="2"/>
<Style.Triggers>
<Trigger Property="Text" Value="">
<Setter Property="BorderBrush" Value="DarkOrange"/>
<Setter Property="ToolTip" Value="请输入姓名"/>
</Trigger>
</Style.Triggers>
</Style>
  • BorderThickness Setter的属性 边框粗细
  • BorderBrush 边框画刷 也就是颜色 这里定义 DarkOrange 深橙色
  • ToolTip 定义tip~

C#绑定对象

先新建一个文件 我命名为ProfileViewModel.cs

1
2
3
4
5
6
7
8
9
10
namespace WpfUiDemo;

public class ProfileViewModel
{

public string DisplayName { get; set; } = "WPF Studyer";

public string Description { get; set; } = "Today now study C# binding object";

}
  • {get; set;}的写法叫自动实现属性,编译器会帮你生成一个隐藏字段来保存值,所以不用自己写存储逻辑。

等价于

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private string _displayName = "WPF Studyer";

public string DisplayName
{
get
{
return _displayName; // 读取时返回保存的值
}

set
{
_displayName = value; // 修改时保存传进来的新值
}
}

然后修改MainWindows.xaml.cs 初始化后加载这个类

1
2
3
4
5
6
public MainWindow()
{
InitializeComponent();

DataContext = new ProfileViewModel();
}

这样在xaml中就能用了

1
2
3
4
5
6
<TextBlock Text="{Binding DisplayName}"
FontSize="18"
Margin="0,0,0,8" />

<TextBlock Text="{Binding Description}"
Margin="0,0,0,16" />
写法对比

去哪里寻找数据

  • {Binding ElementName=NameInput, Path=Text}名为 NameInput 的控件
  • {Binding DisplayName}当前 DataContext 对象的 DisplayName 属性