WPF:依赖属性&资源

时间:2012-10-20 13:12:36

标签: .net wpf xaml dependency-properties

我在MSDN上发现了这个:

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

XAML:

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

定义资源后,您可以引用资源并使用它来提供属性值:

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

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

我的问题是:

  1. StaticResource不被视为依赖属性?如果是,为什么?
  2. 不属于WPF Property System?
  3. 您还可以举例说明如何使用Dependency Property实现默认值吗?

1 个答案:

答案 0 :(得分:1)

DynamicResource 用于设置仅依赖项属性值

相比之下 StaticResource 可以在任何地方使用。您可以使用它来设置依赖项属性值,但不仅。例如,您还可以将元素定义为资源,并通过 StaticResource 在面板中使用它,例如在代码中

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

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

关于问题1 ,资源不是依赖项属性,无论您是使用 StaticResource 还是 DynamicResource 标记扩展引用它。

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

依赖项属性是WPF引入的一种新属性。根据固定的层次结构,依赖属性值取决于多个源(有关详细信息msdn)。

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

最后,要定义依赖项属性的默认值,请参阅以下代码:

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

这里定义了一个名为Alpha的依赖属性,类型为int,默认值为255。

我希望这会有所帮助

相关问题