WPF入门_树形结构与XAML对象属性赋值_2021-06-11
1. 浅析WPF用户界面的树形结构
用户界面即User Interface, 应用程序面向普通使用者的界面, 应用程序和人/交互打交道的部分.
常用的用户界面有DOS用户界面(如控制台应用程序), 图形用户界面(如各种桌面应用, 如浏览器, VS, QQ...).
图形用户界面属于用户友好型界面.
WPF树形结构与Winform等平面结构的异同:
- 其他平面布局:
窗体即画布, 所有控件均在同一个平面上, 不存在谁包含谁, 各控件为平级关系. - WPF树形布局:
XML本身即为一种树形结构, XAML为其变种, 各控件既可以互相独立, 也可以互相嵌套(个别限制情况除外), 选择更多, 布局更加灵活. 示例如图1-2:
2. 在XAML中对用户属性赋值
XAML中的每一组标签都将被XAML编译器创建一个对象(对象, 而非变量). 如上图1-2中XAML编译器会Window, Grid, TextBox*4, Button几个控件编译为对象.
对象有字段有属性, 一般将属性对外暴露供外界使用/查看, 字段不够安全, 仅用来存储数据, 且不具有校验数据的功能.
形式1, Attribute=Value型
形式2, 属性标签
形式3, 标签扩展
形式1, Attribute=Value型
- 简单易懂, 但难以绘制复杂图形
- 值只能是字符串形式
形如HelloNerd.MainWindow.xaml中:
Title="MainWindow" Height="450" Width="800"
WindowStartupLocation="CenterScreen">
HelloNerd.Models.Human类中
//将自定义类型转换器以特性的形式附加到Human类上
[TypeConverterAttribute(typeof(NameToHumanTypeConverter))]
public class Human
{
public string Name { get; set; }
public Human Child { get; set; }
}
///
/// 自定义类型转换器
///
public class NameToHumanTypeConverter: TypeConverter
{
public override object ConvertFrom(
ITypeDescriptorContext context, CultureInfo culture, object value)
{
//value即传递来的"Mikeson"字符串
string name = value.ToString();
Human child = new Human();
child.Name = name;
//return base.ConvertFrom(context, culture, value);原始自动生成的return语句
return child;
}
}
HelloNerd.MainWindow.xaml中:
HelloNerd.MainWindow.xaml.cs中:
private void ShowName(object sender, RoutedEventArgs e)
{
//第一步, 将Windows资源检索出来
//调用窗体自己的FindResource方法, 找到名为human的资源
//尝试转换为Human类型, 用as转换时如为null则返回null
Human human = this.FindResource("human") as Human;
if (human != null)//(human is not null) 类似
{
MessageBox.Show(human.Name+"‘s son is "+human.Child.Name);
}
}
形式2, 标签属性型
- 便于绘制复杂图形
- 便于图形对象的嵌套
形如:
原文:https://www.cnblogs.com/MikeTheMystery/p/14876657.html