wpf 注意点

1.在样式中,如果给样式的TargetType赋值(如TargetType="{x:TypeTextBox}"),而没有给样式x:Key分配值,那么该样式就会应用与所有TargetType设置的类型(TextBox),x:Key会隐式设置与TargetType一样的值(“{x:Type TextBox}”);如果,在样式中给x:Key设值后(“{x:Type TextBox}”除外),该样式就不会应用在所有TargetType设置的类型上了。

2.在ItemControl控件中,ItemSource和DataContext区别:

(1)DataContext 一般是一个非集合性质的对象,而ItemsSource 更期望数据源是 集合对象。

(2)DataContext 是 FrameworkElement 类中定义的一个依赖属性(Dependency property),ItemsSource是 在ItemsControl 类中定义的。所有继承自FrameworkElement 的类(控件)都可以使用DataContext属性并给其赋值,但我们只能给ItemsSource赋值为集合对象

(3)DataContext不能产生模板,它只能用来筛选出数据,供其它控件来绑定。而ItemsSource主要作用就是给模板提供数据。个人理解:在模板里使用Binding时(DataTemplate,ControlTemplate),DataContext不会提供数据源,只有ItemsSource才给模板提供数据。

(4)DataContext主要作用,在没有指定Binding的source时,只知道Path,它会沿着UI元素树一路向树的根部找去,梅路过一个元素节点,就看这个元素节点的DataContext是否有Path指定的属性,如果有,就把这个DataContext作为自己的source,没有就继续向根部找下去。(注意:DataContext被定义在FrameworkElement类里,因此,只有继承FrameworkElement的类,才能作为元素节点)

3.DataTemplate和ControlTemplate

ControlTemplate用于描述控件本身. 使用TemplateBinding来绑定控件自身的属性, 比如{TemplateBinding Background}
DataTemplate用于描述控件的Content. 使用Binding来绑定数据对象的属性, 比如{Binding PersonName}
一般来说, ControlTemplate内有一个ContentPresenter, 这个ContentPresenter的ContentTemplate就是DataTemplate类型

Control类型
    - Template属性 (ControlTemplate类型)
        - ContentPresenter
            - ContentTemplate (DataTemplate类型)

ContentControl类型
    - Template属性 (ControlTemplate类型) 继承自Control
    - ContentTemplate (DataTemplate类型)

ItemsControl类型
    - Template属性 (ControlTemplate类型) 继承自Control
    - ItemsPanel属性 (ItemsPanelTemplate类型) 指定布局容器
    - ItemTemplate属性 (DateTemplate类型) 每个Item的Template

4.Binding

在Binding对象中,主要成员可以分为这么几类:
1)路径:Path属性和XPath属性
2)源:Source、RelativeSource和ElementName
3)更新通知:NotifyOnSourceUpdated、NotifyOnTargetUpdated和NotifyOnValidationError
4)转换器:Converter、ConverterCulture和ConverterParameter
5)验证:ValidatesOnDataErrors、ValidatesOnExceptions、ValidatesOnNotifyDataErrors和ValidationRules
6)绑定方式:Mode,BindingMode枚举类型:TwoWay,OneWay,OneTime,OneWayToSource和Default
需要注意的是:Binding的目标必须是依赖对象的某个依赖属性。

4.1Binding path和source

对于Binding的Path及Source,并非要是依赖属性及依赖对象。几乎任何一个对象都可以作为Binding的Source,主要有普通CLR对象、ado.net对象、XML、Linq、依赖对象、容器的DataContext、RelativeSource和ObjectDataProvider等。
而Path就是普通CLR对象、容器的DataContext、RelativeSource和Linq的某个属性、
ado.net对象的某个字段、依赖对象的某个依赖属性和ObjectDataProvider的某个方法名。
这里需要注意一下几点:

1)有Path没Source,将去找其父元素有该Path的DataContext;
2)有Source没Path,则将Source也作为其Path;

3)无Source无Path,则将其父元素的DataContext既作为Source也作为Path

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值