2012-10-20 90 views
2

我在MSDN上发现了这个:WPF:依赖属性和资源

依赖项属性值可以通过引用资源来设置。通常将资源指定为页根元素的Resources属性值或应用程序(这些位置启用对资源的最方便访问)。以下示例显示如何定义SolidColorBrush资源。

XAML:

<DockPanel.Resources> 
    <SolidColorBrush x:Key="MyBrush" Color="Gold"/> 
</DockPanel.Resources> 

一旦资源被定义,你可以参考资源,并使用它提供的属性值:

<Button Background="{DynamicResource MyBrush}" Content="I am gold" /> 

这种特殊的资源为DynamicResource标记扩展引用。 要使用动态资源引用,您必须将其设置为依赖项属性,因此它特别是由WPF属性系统启用的动态资源引用用法。

我的问题是:

  1. 静态资源不被视为依赖项属性?如果是,为什么?
  2. 不属于WPF属性系统?

你也可以给我一个例子如何使用依赖属性实现默认值吗?

回答

1

DynamicResource用于设置只依赖属性值

相比之下StaticResource可以随处使用。您可以使用它来设置依赖项属性值,但不仅而且。例如,您也可以定义一个元素作为资源由静态资源使用它在面板内部,如代码

<Window> 
    <Window.Resources> 
     <Button Content="btnStaticResource" x:Key="myBtn" /> 
    </Window.Resources> 

    <Grid> 
     <StaticResource ResourceKey="myBtn" /> 
    </Grid> 
</Window> 

关于你问题1,资源不是一个依赖项属性,而不管如果您使用StaticResourceDynamicResource来标记扩展名。

WPF中的资源可以是任何东西,.NET对象,字体,图像,颜色,字符串等。 资源的概念与依赖属性的概念无关。

依赖属性是WPF引入的一种新属性。依赖属性值取决于根据固定层次的多个源(详情请参阅msdn)。

关于你的问题2,是的,StaticResource的概念是WPF资源系统的一部分。

最后,用于定义依赖项属性的默认值参见下面的代码:

public static readonly DependencyProperty AlphaProperty = DependencyProperty.Register ("Alpha", typeof(int), typeof(MyButton), new FrameworkPropertyMetadata(255, FrameworkPropertyMetadataOptions.AffectsRender)); 

在此定义了一个名为阿尔法依赖属性,类型为int的以默认值255

我希望这可以帮助

+0

这是非常有帮助的,现在对我来说更加清晰...当你说typeof(MyButton)时,MyButton是任何控件? (按钮,文本框..)谢谢! – apollon

+0

在这个例子中,一个依赖项属性被添加到类MyButton中,但这个类可以是任何.NET类,它不能是一个控件。 – Klaus78

+0

因此,如果旧的Style属性的值为“{DynamicResource SomeButtonStyle}”,现在我将Style绑定到DependencyProperty。如何让我的DP具有此动态资源的默认值? DP声明的PropertyMetadata参数采用默认对象,但我不知道如何在代码中获取对动态资源的引用。 – Skychan