2

我在 MSDN 上找到了这个:

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

XAML:

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

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

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

此特定资源被称为 DynamicResource Markup Extension 。要使用动态资源引用,您必须设置为依赖属性,因此 WPF 属性系统专门启用了动态资源引用使用。

我的问题是:

  1. StaticResource 不被视为依赖属性?如果是,为什么?
  2. 不属于 WPF 属性系统?

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

4

1 回答 1

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。

我希望这有帮助

于 2012-10-22T10:31:17.513 回答