WPF依赖属性值源(BaseValueSource)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > WPF依赖属性值源(BaseValueSource)

WPF依赖属性值源(BaseValueSource)

 2013/9/6 3:14:38  蒋叶湖  博客园  我要评论(0)
  • 摘要:WPF依赖属性提供一个机制,可以获取依赖属性提供值的来源其以BaseValueSource枚举表示1.DefaultpublicstaticreadonlyDependencyPropertyWorkingTagProperty=DependencyProperty.Register("WorkingTag",typeof(object),typeof(CustomControl),newUIPropertyMetadata("<workingtag>"));2
  • 标签:Values ASE

 

 

WPF依赖属性提供一个机制,可以获取依赖属性提供值的来源

其以BaseValueSource枚举表示

class="wlDisabledImage" style="display: inline; border-width: 0px;" title="image" src="/Upload/Images/2013090603/F0132FCE25FCAF49.png" alt="image" width="680" height="418" border="0" />


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)

image

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 不会去修改属性值源(何处修改属性值)

上一篇: WPF依赖属性(续)(1) 下一篇: 没有下一篇了!
发表评论
用户名: 匿名