您的位置:首页 > 其它

无废话WPF系列3: XAML中为对象属性赋值

2011-02-19 16:36 288 查看
1.使用标签的Attribute为对象属性赋值





我们可以按上面的方式用字符串来赋值,但是比如上面的Fill其实Shape.Fill类型,那为什么我么可以赋Red呢?因为WPF使用TypeConverter进行了转换.

2.使用TypeConverter类将XAML的Attribute与对象的Property进行转换





namespaceDeepXAML { [TypeConverter(typeof(StringToPersonConverter))] publicclassPerson { publicstringName{get;set;} publicPersonChild{get;set;} } }

namespaceDeepXAML { publicclassStringToPersonConverter:TypeConverter { publicoverrideobjectConvertFrom(ITypeDescriptorContextcontext,System.Globalization.CultureInfoculture,objectvalue) { if(valueisstring) { Personp=newPerson(); p.Name=valueasstring; returnp; } returnbase.ConvertFrom(context,culture,value); } } }

publicpartialclassMainWindow:Window { publicMainWindow() { InitializeComponent(); } privatevoidButton_Click(objectsender,RoutedEventArgse) { Personp=(Person)this.FindResource("Jack"); MessageBox.Show(p.Child.Name); } }



3.标记扩展(MarkupExtensions)

标记扩展是一种特殊的Attribute=value语法,Value是由一对花括号及其括起来的内容组成,XAML编译器会对这样的内容做出解析,生成相应的对象。

<Grid>
<StackPanel>
<Buttonx:Name="btnOk"Width="200"Height="100"Click="Button_Click">OK</Button>
<TextBoxText="{BindingElementName=btnOk,Path=Width,Mode=OneWay}"Width="200"Margin="10"></TextBox>
</StackPanel>
</Grid>

标记扩展是可以嵌套,有一些简写,比如{BindingValue,…}与{BindingPath=Value,…}等价;前者是固定位置参数,后者制定参数名字,位置顺序可以变动;标记扩展类的类名以Extension为后缀,但XAML里可以省略这个后缀。

4.导入程序集和引用命名空间

上面的图片已经可以演示出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: