2011-05-02 49 views
0

我是wpf的新手。我一直在阅读很多关于wpf和依赖项属性的知识。我对依赖属性的理解是将属性绑定到xaml(作为目标的xaml)。我设想了一个程序,其中一个配置窗口将控制程序其余部分(字体,字体大小,颜色等)的所有视觉元素。使用全局属性的依赖属性

在我的第一次尝试中,我创建了一个单独的窗口,其中将包含所有不同的配置选项。这失败了,因为我无法弄清楚如何在单独的XAML文件中使用依赖项属性。

此外,依赖项属性只能在直接或不直接实现DependecyObject类的类中注册。我如何知道哪些wpf对象实现它?看起来窗户没有,但我可能是错的。我的第二个尝试是这样的,在顶部窗口中注册依赖关系,这样整个可视化树就可以访问它。我有异常被抛出,我唯一能做的就是该窗口没有实现给DependencyObject。 (我可能会误解,而视觉树的东西对我来说仍然是一个谜,我正在学习)

所以现在我很茫然。我试图甚至有可能吗?这个项目的全部目的是帮助我学习WPF,现在我想知道是否应该降低我对wpf可以完成的任务的期望。

编辑:

什么样的异常?你想做什么?你能粘贴一些代码吗?

public partial class MainWindow : Window { 
public Color BackColor { 
    get { return (Color)GetValue(BackColorProperty); } 
    set { SetValue(BackColorProperty, value); } 
} 
public static readonly DependencyProperty BackColorProperty = 
    DependencyProperty.Register("BackColor",typeof(Color),typeof(MainWindow), 
     new UIPropertyMetadata(0)); 

看来,Color导致异常。我将其更改为int,并没有发生任何异常。那么只有原始类型才能被注册?

WPF是一个框架,可以帮助你建立真正漂亮的应用程序(它也包括打印等)你想做什么?它应该是Visual Tree的一部分吗?

此外,这个项目只是为了让我学习WPF。我的想法是用不同的页面创建一个主界面。配置按钮会弹出一个窗口,其中包含用于更改字体,字体大小,背景颜色等的选项。这些更改将在用户进行更改时应用于主UI。我的问题是如何在配置类以外的地方访问那些依赖项属性?我如何拥有一个可以具有滑块和组合框的窗口,并且其他任何类都可以访问这些配置设置?

简而言之,我希望单个配置(字体和颜色)能以某种方式被所有用户界面继承。并且该配置可以被用户改变和看到。

回答

0

另外,依赖关系属性只能在实现直接或indeirectly的DependecyObject类的类注册。我如何知道哪些wpf对象实现它?看起来窗户没有,但我可能是错的。

http://msdn.microsoft.com/en-us/library/system.windows.window.aspx

看看继承层次结构它确实实现DependecyObject

我的第二次尝试此,注册在顶部窗口的依赖关系,因此整机视觉树将有机会获得它。我有异常被抛出,我唯一能做的就是该窗口没有实现给DependencyObject。

什么样的异常?你想做什么?你能粘贴一些代码吗?

所以现在我很茫然。我试图甚至有可能吗?这个项目的全部目的是帮助我学习WPF,现在我想知道是否应该降低我对wpf可以完成的任务的期望。

WPF是一个框架,以帮助您储存卡真的好期待的应用程序(它包括也打印等),你到底想干什么?它应该是Visual Tree的一部分吗?

0

我们不能在这里解决学习全新框架和设计整个程序的重大任务。这需要时间。它可能令人望而生畏,但坚持下去。

至于你例外,问题是那个神秘:

UIPropertyMetadata(0) 

实际上提供的依赖项属性的默认值,这个值必须在第二个参数指定Register的类型相匹配。由于0是一个整数,并且您的属性为Color,因此依赖项属性子系统会引发异常。相反,您可以使用:

UIPropertyMetadata(new Color()) 

或任何其他颜色作为默认值。

0

依赖属性是一个专门为WPF创建的新设计。他们解决的问题之一是创建属性值的更快解析,因为它们不使用较旧的较慢技术(请阅读它们为什么创建它们)。

刚开始他们很难理解,因为它不完全清楚为什么需要支持名为INotifyPropertyChanged的接口。但其中一个主要原因是,如果您正确实施了DependencyProperty,您将能够在属性窗口中更改该属性的设计时间属性值!现在这是一件非常酷的事情,因为您可以非常方便地设置所有的默认属性。

这样做是为了设计时间属性编辑的缘故,可以让您更多地了解DP以及它们使用的原因。事实上,有些人更喜欢他们,因为他们不太难编码。

使用“Generic”文件夹方法创建自定义控件时也使用DP。这就是微软自己创建所有控件的方式。

使用它们时需要注意一些注意事项。直到特定控件被其他东西包含之后,才能看到DP的设计时间属性。换句话说带DP的UserControl不会在UserControl设计中显示这些Dps。他们会;但是,显示在包含该用户控件的控件中。

DP使用元数据,PropertyChanged回调,默认值以及Cohersion和其他技术可以最大限度地控制它们包含的内容。 DP是财产管理的终极目标。

不断冲刷互联网,因为这里有很多关于这个主题的文章。