WPF依赖属性值源(BaseValueSource)
2010-08-03 13:26 Clingingboy 阅读(1760) 评论(0) 编辑 收藏 举报
WPF依赖属性提供一个机制,可以获取依赖属性提供值的来源
其以BaseValueSource枚举表示
1.Default
public static readonly DependencyProperty WorkingTagProperty = DependencyProperty.Register( "WorkingTag", typeof(object), typeof(CustomControl), new UIPropertyMetadata("<working tag>"));
2.DefaultStyle和DefaultStyleTrigger(Style和StyleTrigger)
注意点:若即定义在外部程序集中的默认控件样式则为DefaultStyle和DefaultStyleTrigger,否则定义在本地项目(如在Application中重新定义控件样式,则为Style和StyleTrigger)
3.TemplateTrigger和ParentTemplateTrigger
在模板中触发
<ControlTemplate TargetType="{x:Type local:CustomControl}"> <Button x:Name="Part_Button" Content="{TemplateBinding Title}" IsEnabled="{TemplateBinding IsEnabled}" Background="{TemplateBinding Background}" /> <ControlTemplate.Triggers> <Trigger SourceName="Part_Button" Property="IsEnabled" Value="False"> <Setter Property="Title" Value="disable test text"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate>
4.ParentTemplate
当模板中有定义内部控件样式模板时,内部控件值变更由上级模板触发
下面TextBlock的Text的触发源为ParentTemplate
<Style TargetType="{x:Type local:CustomControl}"> <Setter Property="Title" Value="default test text" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:CustomControl}"> <ControlTemplate.Resources> <Style TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <TextBlock Text="{TemplateBinding Content}"/> </ControlTemplate> </Setter.Value> </Setter> </Style> </ControlTemplate.Resources> <Border> <Button x:Name="Part_Button" Content="{TemplateBinding Title}" IsEnabled="{TemplateBinding IsEnabled}" Background="{TemplateBinding Background}" /> </Border> <ControlTemplate.Triggers> <Trigger SourceName="Part_Button" Property="IsEnabled" Value="False"> <Setter Property="Title" Value="disable test text"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
5.Local
即本地调用了SetValue方法
public object WorkingTag { get { return GetValue(WorkingTagProperty); } set { SetValue(WorkingTagProperty, value); } }
6.Inherited
属性继承是一个向下包容继承的关系
由属性继承值更改触发,如文字大小(FontSize)就是一个继承关系,更改根元素,那么子元素就全会更改
此功能也可以用来debug用,用来检测值是由何时修改的.
.net 4.0新增方法
DependencyObject ..::. SetCurrentValue 方法
这个方法类似SetValue方法,但SetCurrentValue 不会去修改属性值源(即何处修改属性值)
参考文档:
http://msdn.microsoft.com/en-us/library/ms743230.aspx
参考绑定时bug
http://blogs.msdn.com/b/vinsibal/archive/2009/03/24/the-control-local-values-bug.aspx
http://arbel.net/blog/archive/2009/11/04/local-values-in-dependencyobjects.aspx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2009-08-03 NHibernate Step By Step(5)-实体表现模式