无废话WPF系列3: XAML中为对象属性赋值
2011-02-19 16:36 敏捷的水 阅读(2562) 评论(1) 编辑 收藏 举报1. 使用标签的Attribute为对象属性赋值
我们可以按上面的方式用字符串来赋值,但是比如上面的Fill其实Shape.Fill类型,那为什么我么可以赋Red呢?因为WPF使用TypeConverter进行了转换.
2. 使用TypeConverter类将XAML的Attribute与对象的Property进行转换
1 2 3 4 5 6 7 8 9 | namespace DeepXAML { [TypeConverter( typeof (StringToPersonConverter))] public class Person { public string Name { get ; set ; } public Person Child { get ; set ; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | namespace DeepXAML { public class StringToPersonConverter:TypeConverter { public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { if (value is string ) { Person p = new Person(); p.Name = value as string ; return p; } return base .ConvertFrom(context, culture, value); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click( object sender, RoutedEventArgs e) { Person p = (Person) this .FindResource( "Jack" ); MessageBox.Show(p.Child.Name); } } |
1 | |
3. 标记扩展(Markup Extensions)
标记扩展是一种特殊的Attribute=value语法,Value是由一对花括号及其括起来的内容组成,XAML编译器会对这样的内容做出解析,生成相应的对象。
1 2 3 4 5 6 | <Grid> <StackPanel> <Button x:Name= "btnOk" Width= "200" Height= "100" Click= "Button_Click" >OK</Button> <TextBox Text= "{Binding ElementName=btnOk, Path=Width,Mode=OneWay}" Width= "200" Margin= "10" ></TextBox> </StackPanel> </Grid> |
标记扩展是可以嵌套,有一些简写,比如{Binding Value,…}与{Binding Path=Value,…}等价;前者是固定位置参数,后者制定参数名字,位置顺序可以变动;标记扩展类的类名以Extension为后缀,但XAML里可以省略这个后缀。
4. 导入程序集和引用命名空间
上面的图片已经可以演示出来。
扫码关注公众号,了解更多管理,见识,育儿等内容

作者: 王德水
出处:http://www.cnblogs.com/cnblogsfans
版权:本文版权归作者所有,转载需经作者同意。
出处:http://www.cnblogs.com/cnblogsfans
版权:本文版权归作者所有,转载需经作者同意。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)